From 1ccfe3b755c71bdb5c6e9bf842ac7aaa92f5913f Mon Sep 17 00:00:00 2001 From: Dmitry Baryshkov Date: Sat, 7 Mar 2020 01:09:55 +0300 Subject: lib/x509/output.c: remove occasioinal memory leak in print_issuer_sign_tool() 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 --- .../0b1ff2feb11e82901e7ba196270fa134e5169364 | Bin 0 -> 1609 bytes lib/x509/output.c | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 new file mode 100644 index 0000000000..f454bf40c8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 differ diff --git a/lib/x509/output.c b/lib/x509/output.c index 2aa78b478b..1e605d8fb6 100644 --- a/lib/x509/output.c +++ b/lib/x509/output.c @@ -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); -- cgit v1.2.1