diff options
author | dkf <dkf@noemail.net> | 2011-08-04 23:12:30 (GMT) |
---|---|---|
committer | dkf <dkf@noemail.net> | 2011-08-04 23:12:30 (GMT) |
commit | d2425b31ef160cbabc59c462b0506f29175dd2fb (patch) | |
tree | 0c72f36250fb729c71ed3b3128bc61531adecea0 /generic/tclZlib.c | |
parent | 52f5d8ac663146901f02376f83c2b96fa3b6bc13 (diff) | |
download | tcl-d2425b31ef160cbabc59c462b0506f29175dd2fb.zip tcl-d2425b31ef160cbabc59c462b0506f29175dd2fb.tar.gz tcl-d2425b31ef160cbabc59c462b0506f29175dd2fb.tar.bz2 |
[Bug 3386197]: Plug memory leak in unstacking of zlib transforms.
FossilOrigin-Name: 89ff730dfa2e144ceff4b4fe847659226bfc4b02
Diffstat (limited to 'generic/tclZlib.c')
-rw-r--r-- | generic/tclZlib.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/generic/tclZlib.c b/generic/tclZlib.c index 3ddc3fb..80431a3 100644 --- a/generic/tclZlib.c +++ b/generic/tclZlib.c @@ -2253,7 +2253,16 @@ ZlibTransformClose( ZlibChannelData *cd = instanceData; int e, result = TCL_OK; + /* + * Delete the support timer. + */ + ZlibTransformTimerKill(cd); + + /* + * Flush any data waiting to be compressed. + */ + if (cd->mode == TCL_ZLIB_STREAM_DEFLATE) { cd->outStream.avail_in = 0; do { @@ -2291,6 +2300,10 @@ ZlibTransformClose( e = inflateEnd(&cd->outStream); } + /* + * Release all memory. + */ + if (cd->inBuffer) { ckfree(cd->inBuffer); cd->inBuffer = NULL; @@ -2299,6 +2312,7 @@ ZlibTransformClose( ckfree(cd->outBuffer); cd->outBuffer = NULL; } + ckfree(cd); return result; } |