diff options
author | NIIBE Yutaka <[email protected]> | 2024-11-11 00:51:54 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-11-13 09:41:51 +0000 |
commit | 1e28c55e11c067e7f944ea9be7b29214dc67a86f (patch) | |
tree | 82fbcd73c66d9b40324930e6c87373f86449b0be | |
parent | agent: Fix resource leak for PRIMARY_CTX. (diff) | |
download | gnupg-1e28c55e11c067e7f944ea9be7b29214dc67a86f.tar.gz gnupg-1e28c55e11c067e7f944ea9be7b29214dc67a86f.zip |
scd: Fix resource leaks on error paths.
* scd/app-dinsig.c (do_readcert): Don't return directly but care about
releasing memory.
* scd/app-nks.c (readcert_from_ef): Likewise.
--
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | scd/app-dinsig.c | 5 | ||||
-rw-r--r-- | scd/app-nks.c | 12 |
2 files changed, 13 insertions, 4 deletions
diff --git a/scd/app-dinsig.c b/scd/app-dinsig.c index 990de3405..be3019ee1 100644 --- a/scd/app-dinsig.c +++ b/scd/app-dinsig.c @@ -226,7 +226,10 @@ do_readcert (app_t app, const char *certid, else if ( class == CLASS_UNIVERSAL && tag == TAG_SET && constructed ) rootca = 1; else - return gpg_error (GPG_ERR_INV_OBJ); + { + err = gpg_error (GPG_ERR_INV_OBJ); + goto leave; + } totobjlen = objlen + hdrlen; log_assert (totobjlen <= buflen); diff --git a/scd/app-nks.c b/scd/app-nks.c index c207fd500..dd220b366 100644 --- a/scd/app-nks.c +++ b/scd/app-nks.c @@ -999,7 +999,10 @@ readcert_from_ef (app_t app, int fid, unsigned char **cert, size_t *certlen) else if ( class == CLASS_UNIVERSAL && tag == TAG_SET && constructed ) rootca = 1; else - return gpg_error (GPG_ERR_INV_OBJ); + { + err = gpg_error (GPG_ERR_INV_OBJ); + goto leave; + } totobjlen = objlen + hdrlen; log_assert (totobjlen <= buflen); @@ -1030,7 +1033,10 @@ readcert_from_ef (app_t app, int fid, unsigned char **cert, size_t *certlen) if (err) goto leave; if ( !(class == CLASS_UNIVERSAL && tag == TAG_SEQUENCE && constructed) ) - return gpg_error (GPG_ERR_INV_OBJ); + { + err = gpg_error (GPG_ERR_INV_OBJ); + goto leave; + } totobjlen = objlen + hdrlen; log_assert (save_p + totobjlen <= buffer + buflen); memmove (buffer, save_p, totobjlen); @@ -1144,7 +1150,7 @@ iterate_over_filelist (app_t app, const char *want_keygripstr, int capability, continue; } - /* Found. Return but save the last idenx of the loop. */ + /* Found. Return but save the last index of the loop. */ *idx_p = idx; return 0; } |