aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES5
-rw-r--r--RELEASE-NOTES4
-rw-r--r--TODO-RELEASE4
-rw-r--r--lib/content_encoding.c10
-rw-r--r--lib/content_encoding.h6
-rw-r--r--lib/http.c3
6 files changed, 29 insertions, 3 deletions
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, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, 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 <curl/mprintf.h>
@@ -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 */