summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2015-11-09 23:04:03 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2015-11-09 23:07:04 +0100
commita7edeb53c1e20ecbcef2516cb9753d30a8c8f018 (patch)
treefae8d1035e3749b8501fb7f71009689e4142ecd8 /lib
parent8869882860a0205b879ff4a12ef66ccf92032315 (diff)
downloadgnutls-a7edeb53c1e20ecbcef2516cb9753d30a8c8f018.tar.gz
openpgp: eliminate leaks in gnutls_openpgp_keyring_import()
Diffstat (limited to 'lib')
-rw-r--r--lib/openpgp/extras.c8
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: