summaryrefslogtreecommitdiffstats
path: root/generic/tclZlib.c
diff options
context:
space:
mode:
authordkf <dkf@noemail.net>2011-08-04 23:12:30 (GMT)
committerdkf <dkf@noemail.net>2011-08-04 23:12:30 (GMT)
commitd2425b31ef160cbabc59c462b0506f29175dd2fb (patch)
tree0c72f36250fb729c71ed3b3128bc61531adecea0 /generic/tclZlib.c
parent52f5d8ac663146901f02376f83c2b96fa3b6bc13 (diff)
downloadtcl-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.c14
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;
}