diff options
author | Tim Rühsen <tim.ruehsen@gmx.de> | 2019-04-14 19:48:54 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-04-15 00:32:45 +0200 |
commit | ef15b53cb101c378a905faa759aa95429d2e965d (patch) | |
tree | 090b39d987cac13bcf648f5d34608ee4167b168a | |
parent | 47a862a9be2e2d58adc7ac6c5bd95bcbed057299 (diff) | |
download | libmicrohttpd-ef15b53cb101c378a905faa759aa95429d2e965d.tar.gz libmicrohttpd-ef15b53cb101c378a905faa759aa95429d2e965d.zip |
Fix realloc memleak in compress_buf()
-rw-r--r-- | src/examples/http_chunked_compression.c | 12 |
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); |