From: John Darrington <john@darrington.wattle.id.au>
Date: Thu, 7 Mar 2013 20:45:43 +0000 (+0100)
Subject: zip-reader.c: Fix memory leak
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fbuilds%2F20130308030505%2Fpspp;p=pspp

zip-reader.c: Fix memory leak
---

diff --git a/src/libpspp/zip-reader.c b/src/libpspp/zip-reader.c
index 985b0a9027..7c1e342aa7 100644
--- a/src/libpspp/zip-reader.c
+++ b/src/libpspp/zip-reader.c
@@ -382,7 +382,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;
@@ -396,7 +396,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
@@ -450,8 +453,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;