get_proxy_authenticate() is called with a "gc" parameter which MUST be NULL, otherwise string_alloc() will allocate memory in the gc_arena while the caller expects the result to be durable and will do explicit free() when no longer needed. Remove gc parameter, call string_alloc() with "NULL" so this is clearly visible.
Signed-off-by: Gert Doering <g...@greenie.muc.de> --- src/openvpn/proxy.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/openvpn/proxy.c b/src/openvpn/proxy.c index 8ff09ba..05f362d 100644 --- a/src/openvpn/proxy.c +++ b/src/openvpn/proxy.c @@ -309,7 +309,6 @@ static int get_proxy_authenticate(socket_descriptor_t sd, int timeout, char **data, - struct gc_arena *gc, volatile int *signal_received) { char buf[256]; @@ -332,14 +331,14 @@ get_proxy_authenticate(socket_descriptor_t sd, if (!strncmp(buf+20, "Basic ", 6)) { msg(D_PROXY, "PROXY AUTH BASIC: '%s'", buf); - *data = string_alloc(buf+26, gc); + *data = string_alloc(buf+26, NULL); ret = HTTP_AUTH_BASIC; } #if PROXY_DIGEST_AUTH else if (!strncmp(buf+20, "Digest ", 7)) { msg(D_PROXY, "PROXY AUTH DIGEST: '%s'", buf); - *data = string_alloc(buf+27, gc); + *data = string_alloc(buf+27, NULL); ret = HTTP_AUTH_DIGEST; } #endif @@ -981,7 +980,6 @@ establish_http_proxy_passthru(struct http_proxy_info *p, const int method = get_proxy_authenticate(sd, get_server_poll_remaining_time(server_poll_timeout), &pa, - NULL, signal_received); if (method != HTTP_AUTH_NONE) { -- 2.10.2 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel