summaryrefslogtreecommitdiff
path: root/tools/source/zcodec/zcodec.cxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2016-01-06 17:49:49 +0100
committerStephan Bergmann <sbergman@redhat.com>2016-01-07 11:14:26 +0100
commit85aa507f737b99501bb91cf79985af78f46ff0be (patch)
treeb4423a72ea15412e534cdca83fe91ffaba09bd4d /tools/source/zcodec/zcodec.cxx
parentbe343661b076f3f57e7eb9ca1a5a4d3529752b58 (diff)
Avoid memory leaks upon (de)compression failure
This e.g. reduces the LSan-reported leakage during CppunitTest_sd_filters_test from SUMMARY: AddressSanitizer: 504104 byte(s) leaked in 4654 allocation(s). to SUMMARY: AddressSanitizer: 115048 byte(s) leaked in 4639 allocation(s). Change-Id: If922e872d9f696847face198e082144ccd5f12de
Diffstat (limited to 'tools/source/zcodec/zcodec.cxx')
-rw-r--r--tools/source/zcodec/zcodec.cxx13
1 files changed, 8 insertions, 5 deletions
diff --git a/tools/source/zcodec/zcodec.cxx b/tools/source/zcodec/zcodec.cxx
index 7a983aaf9392..f11f7898ef15 100644
--- a/tools/source/zcodec/zcodec.cxx
+++ b/tools/source/zcodec/zcodec.cxx
@@ -82,17 +82,20 @@ long ZCodec::EndCompression()
{
long retvalue = 0;
- if (mbStatus && meState != STATE_INIT)
+ if (meState != STATE_INIT)
{
if (meState == STATE_COMPRESS)
{
- do
+ if (mbStatus)
{
+ do
+ {
+ ImplWriteBack();
+ }
+ while ( deflate( PZSTREAM, Z_FINISH ) != Z_STREAM_END );
+
ImplWriteBack();
}
- while ( deflate( PZSTREAM, Z_FINISH ) != Z_STREAM_END );
-
- ImplWriteBack();
retvalue = PZSTREAM->total_in;
deflateEnd( PZSTREAM );