]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
lib/x509/output.c: remove occasioinal memory leak in print_issuer_sign_tool()
authorDmitry Baryshkov <dbaryshkov@gmail.com>
Fri, 6 Mar 2020 22:09:55 +0000 (01:09 +0300)
committerDmitry Baryshkov <dbaryshkov@gmail.com>
Fri, 6 Mar 2020 22:09:55 +0000 (01:09 +0300)
Remove memory leak in error handling in print_issuer_sign_tool() by
moving asn1_delete_structure to the end of the function.

Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 [new file with mode: 0644]
lib/x509/output.c

diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364
new file mode 100644 (file)
index 0000000..f454bf4
Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 differ
index 2aa78b478ba0da10fa95321251238de9a1f4a25c..1e605d8fb64a90e66b8e05318920d2b4c17b2363 100644 (file)
@@ -908,7 +908,6 @@ static void print_issuer_sign_tool(gnutls_buffer_st * str, const char *prefix, c
        if ((result = _asn1_strict_der_decode(&tmpasn, der->data, der->size, asn1_err)) != ASN1_SUCCESS) {
                gnutls_assert();
                _gnutls_debug_log("_asn1_strict_der_decode: %s\n", asn1_err);
-               asn1_delete_structure(&tmpasn);
                goto hexdump;
        }
 
@@ -949,6 +948,8 @@ static void print_issuer_sign_tool(gnutls_buffer_st * str, const char *prefix, c
        return;
 
 hexdump:
+       asn1_delete_structure(&tmpasn);
+
        addf(str, _("%s\t\t\tASCII: "), prefix);
        _gnutls_buffer_asciiprint(str, (char*)der->data, der->size);