diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2015-11-09 23:04:03 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2015-11-09 23:07:04 +0100 |
commit | a7edeb53c1e20ecbcef2516cb9753d30a8c8f018 (patch) | |
tree | fae8d1035e3749b8501fb7f71009689e4142ecd8 /lib | |
parent | 8869882860a0205b879ff4a12ef66ccf92032315 (diff) | |
download | gnutls-a7edeb53c1e20ecbcef2516cb9753d30a8c8f018.tar.gz |
openpgp: eliminate leaks in gnutls_openpgp_keyring_import()
Diffstat (limited to 'lib')
-rw-r--r-- | lib/openpgp/extras.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/openpgp/extras.c b/lib/openpgp/extras.c index 114cae1372..dc27326a6d 100644 --- a/lib/openpgp/extras.c +++ b/lib/openpgp/extras.c @@ -124,6 +124,7 @@ gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring, cdk_stream_t input = NULL; size_t raw_len = 0; uint8_t *raw_data = NULL; + unsigned free_data = 0; if (data->data == NULL || data->size == 0) { gnutls_assert(); @@ -182,6 +183,8 @@ gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring, err = GNUTLS_E_BASE64_DECODING_ERROR; goto error; } + + free_data = 1; } else { /* RAW */ raw_len = data->size; raw_data = data->data; @@ -192,6 +195,11 @@ gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring, if (err) gnutls_assert(); + if (free_data) { + err = _gnutls_map_cdk_rc(err); + goto error; + } + return _gnutls_map_cdk_rc(err); error: |