From f1218b6460fe5bd8bbece4f6f5a5262b3bce4c8f Mon Sep 17 00:00:00 2001 From: John Darrington Date: Thu, 7 Mar 2013 21:45:43 +0100 Subject: [PATCH] zip-reader.c: Fix memory leak --- src/libpspp/zip-reader.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libpspp/zip-reader.c b/src/libpspp/zip-reader.c index a36bd6f25f..3f1d277c92 100644 --- a/src/libpspp/zip-reader.c +++ b/src/libpspp/zip-reader.c @@ -384,7 +384,7 @@ zip_member_open (struct zip_reader *zr, const char *member) uint32_t ucomp_size, comp_size; uint32_t crc; - + bool new_member = false; char *name = NULL; int i; @@ -398,7 +398,10 @@ zip_member_open (struct zip_reader *zr, const char *member) zm = zr->members[i]; if (zm == NULL) - zm = zr->members[i] = zip_header_read_next (zr); + { + zm = zr->members[i] = zip_header_read_next (zr); + new_member = true; + } if (zm && 0 == strcmp (zm->name, member)) break; else @@ -452,8 +455,11 @@ zip_member_open (struct zip_reader *zr, const char *member) free (name); zm->bytes_unread = zm->ucomp_size; + + if ( !new_member) + decompressors[zm->compression].finish (zm); - if ( ! decompressors[zm->compression].init (zm) ) + if (!decompressors[zm->compression].init (zm) ) return NULL; return zm; -- 2.30.2