From 3eb6ebf5e4b7d1af92ec321a608b83870ac1d177 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Sat, 25 Mar 2017 21:33:30 +0100 Subject: [PATCH] Fix memory leak --- src/request-internal.c | 3 +++ src/stub.c | 3 ++- src/util-internal.c | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/request-internal.c b/src/request-internal.c index d52ad585..7663e37c 100644 --- a/src/request-internal.c +++ b/src/request-internal.c @@ -110,6 +110,9 @@ network_req_cleanup(getdns_network_req *net_req) if (net_req->response && (net_req->response < net_req->wire_data || net_req->response > net_req->wire_data+ net_req->wire_data_sz)) GETDNS_FREE(net_req->owner->my_mf, net_req->response); + if (netreq->debug_tls_peer_cert.size && + netreq->debug_tls_peer_cert.data) + OPENSSL_free(netreq->debug_tls_peer_cert.data); } static uint8_t * diff --git a/src/stub.c b/src/stub.c index 068eeb72..c97789f6 100644 --- a/src/stub.c +++ b/src/stub.c @@ -1673,7 +1673,8 @@ upstream_write_cb(void *userarg) return; default: - if (netreq->upstream->tls_obj && + if (netreq->owner->return_call_reporting && + netreq->upstream->tls_obj && (cert = SSL_get_peer_certificate(netreq->upstream->tls_obj))) { assert(netreq->debug_tls_peer_cert.data == NULL); diff --git a/src/util-internal.c b/src/util-internal.c index 5c1d92c7..33c31745 100644 --- a/src/util-internal.c +++ b/src/util-internal.c @@ -912,7 +912,7 @@ _getdns_create_call_reporting_dict( } netreq->debug_tls_peer_cert.size = 0; OPENSSL_free(netreq->debug_tls_peer_cert.data); - + netreq->debug_tls_peer_cert.data = NULL; return netreq_debug; }