From: Azat Khuzhin Date: Tue, 9 Jan 2018 18:44:57 +0000 (+0300) Subject: http: fix leaks in evhttp_uriencode() X-Git-Tag: release-2.1.9-beta^2~139 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=123362e9a81ca4b6d3944357f80e508896837049;p=libevent http: fix leaks in evhttp_uriencode() Fixes: #584 (cherry picked from commit 61c21492680505706cad9240c39666ee3b56a89c) --- diff --git a/http.c b/http.c index b3087b5b..196ddd1d 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 *