From 61c21492680505706cad9240c39666ee3b56a89c Mon Sep 17 00:00:00 2001 From: Azat Khuzhin <a3at.mail@gmail.com> Date: Tue, 9 Jan 2018 21:44:57 +0300 Subject: [PATCH] http: fix leaks in evhttp_uriencode() Fixes: #584 --- http.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/http.c b/http.c index f2e49719..c0e7adfc 100644 --- a/http.c +++ b/http.c @@ -3071,16 +3071,15 @@ evhttp_uriencode(const char *uri, ev_ssize_t len, int space_as_plus) { struct evbuffer *buf = evbuffer_new(); const char *p, *end; - char *result; + char *result = NULL; - if (buf == NULL) { - return (NULL); + if (!buf) { + goto out; } - if (len >= 0) { if (uri + len < uri) { - return (NULL); + goto out; } end = uri + len; @@ -3089,11 +3088,11 @@ evhttp_uriencode(const char *uri, ev_ssize_t len, int space_as_plus) if (slen >= EV_SSIZE_MAX) { /* we don't want to mix signed and unsigned */ - return (NULL); + goto out; } if (uri + slen < uri) { - return (NULL); + goto out; } end = uri + slen; @@ -3115,9 +3114,10 @@ evhttp_uriencode(const char *uri, ev_ssize_t len, int space_as_plus) if (result) evbuffer_remove(buf, result, evbuffer_get_length(buf)); - evbuffer_free(buf); - - return (result); +out: + if (buf) + evbuffer_free(buf); + return result; } char * -- 2.40.0