aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Rühsen <tim.ruehsen@gmx.de>2019-04-14 19:48:54 +0200
committerChristian Grothoff <christian@grothoff.org>2019-04-15 00:32:45 +0200
commitef15b53cb101c378a905faa759aa95429d2e965d (patch)
tree090b39d987cac13bcf648f5d34608ee4167b168a
parent47a862a9be2e2d58adc7ac6c5bd95bcbed057299 (diff)
downloadlibmicrohttpd-ef15b53cb101c378a905faa759aa95429d2e965d.tar.gz
libmicrohttpd-ef15b53cb101c378a905faa759aa95429d2e965d.zip
Fix realloc memleak in compress_buf()
-rw-r--r--src/examples/http_chunked_compression.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/examples/http_chunked_compression.c b/src/examples/http_chunked_compression.c
index 36b3e1fd..9e49c131 100644
--- a/src/examples/http_chunked_compression.c
+++ b/src/examples/http_chunked_compression.c
@@ -41,6 +41,7 @@ compress_buf (z_stream *strm, const void *src, size_t src_size, size_t *offset,
41 unsigned int have; 41 unsigned int have;
42 int ret; 42 int ret;
43 int flush; 43 int flush;
44 void *tmp_dest;
44 *dest = NULL; 45 *dest = NULL;
45 *dest_size = 0; 46 *dest_size = 0;
46 do 47 do
@@ -65,9 +66,14 @@ compress_buf (z_stream *strm, const void *src, size_t src_size, size_t *offset,
65 ret = deflate (strm, flush); 66 ret = deflate (strm, flush);
66 have = CHUNK - strm->avail_out; 67 have = CHUNK - strm->avail_out;
67 *dest_size += have; 68 *dest_size += have;
68 *dest = realloc (*dest, *dest_size); 69 tmp_dest = realloc (*dest, *dest_size);
69 if (NULL == *dest) 70 if (NULL == tmp_dest)
70 return MHD_NO; 71 {
72 free (*dest);
73 *dest = NULL;
74 return MHD_NO;
75 }
76 *dest = tmp_dest;
71 memcpy ((*dest) + ((*dest_size) - have), tmp, have); 77 memcpy ((*dest) + ((*dest_size) - have), tmp, have);
72 } 78 }
73 while (0 == strm->avail_out); 79 while (0 == strm->avail_out);