diff --git a/CHANGES b/CHANGES index d12ddb3af..b68d49bdb 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,11 @@ Changelog Daniel Stenberg (11 May 2009) +- Balint Szilakszi reported a memory leak when libcurl did gzip decompression + of streams that had some parts (legitimately) missing. We now provide and use + a proper cleanup function for the content encoding submodule. + http://curl.haxx.se/mail/lib-2009-05/0092.html + - Kamil Dudka provided a fix for libcurl-NSS reported by Michael Cronenworth at https://bugzilla.redhat.com/show_bug.cgi?id=453612#c12 diff --git a/RELEASE-NOTES b/RELEASE-NOTES index e3b82bc02..57dcac95a 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -46,6 +46,7 @@ This release includes the following bugfixes: o fixed the Curl_getoff_all_pipelines SIGSEGV o POST, NTLM and following a redirect hang o libcurl+NSS endless loop on incorrect password for private key + o gzip decompression memory leak This release includes the following known bugs: @@ -59,6 +60,7 @@ advice from friends like these: Kamil Dudka, Jim Freeman, Daniel Johnson, Toshio Kuratomi, Martin Storsjo, Pramod Sharma, Gisle Vanem, Lenaic Lefever, Rainer Koenig, Sven Wegener, Tim Chen, Constantine Sapuntzakis, David McCreedy, Michael Smith, - Colin Watson, Ebenezer Ikonne, Laurent Rabret, Michael Cronenworth + Colin Watson, Ebenezer Ikonne, Laurent Rabret, Michael Cronenworth, + Balint Szilakszi Thanks! (and sorry if I forgot to mention someone) diff --git a/TODO-RELEASE b/TODO-RELEASE index d03401419..3d2d4bbdf 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -9,10 +9,12 @@ To be addressed in 7.19.5 (planned release: May 2009) - awaiting patch rework/breakdown 235 - #2784055, connect race with multi and socks proxy + Code adjustment for FTP over socks proxy remains 236 - timeout in milliseconds doesn't seem to work + http://curl.haxx.se/mail/lib-2009-05/0021.html -239 - +240 - To be addressed in 7.19.6 (planned release: July 2009) ========================= diff --git a/lib/content_encoding.c b/lib/content_encoding.c index 411f21337..08cf1dccc 100644 --- a/lib/content_encoding.c +++ b/lib/content_encoding.c @@ -414,4 +414,14 @@ Curl_unencode_gzip_write(struct connectdata *conn, return inflate_stream(conn, k); #endif } + +void Curl_unencode_cleanup(struct connectdata *conn) +{ + struct SessionHandle *data = conn->data; + struct SingleRequest *k = &data->req; + z_stream *z = &k->z; + if(k->zlib_init != ZLIB_UNINIT) + (void) exit_zlib(z, &k->zlib_init, CURLE_OK); +} + #endif /* HAVE_LIBZ */ diff --git a/lib/content_encoding.h b/lib/content_encoding.h index aa51420db..5e1db65a7 100644 --- a/lib/content_encoding.h +++ b/lib/content_encoding.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2008, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2009, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -29,8 +29,11 @@ */ #ifdef HAVE_LIBZ #define ALL_CONTENT_ENCODINGS "deflate, gzip" +/* force a cleanup */ +void Curl_unencode_cleanup(struct connectdata *conn); #else #define ALL_CONTENT_ENCODINGS "identity" +#define Curl_unencode_cleanup(x) #endif CURLcode Curl_unencode_deflate_write(struct connectdata *conn, @@ -42,4 +45,5 @@ Curl_unencode_gzip_write(struct connectdata *conn, struct SingleRequest *k, ssize_t nread); + #endif diff --git a/lib/http.c b/lib/http.c index 9c020396c..a17c6eba9 100644 --- a/lib/http.c +++ b/lib/http.c @@ -97,6 +97,7 @@ #include "strtoofft.h" #include "multiif.h" #include "rawstr.h" +#include "content_encoding.h" #define _MPRINTF_REPLACE /* use our functions only */ #include @@ -1917,6 +1918,8 @@ CURLcode Curl_http_done(struct connectdata *conn, struct HTTP *http =data->state.proto.http; (void)premature; /* not used */ + Curl_unencode_cleanup(conn); + /* set the proper values (possibly modified on POST) */ conn->fread_func = data->set.fread_func; /* restore */ conn->fread_in = data->set.in; /* restore */