From: Ben Pfaff <blp@cs.stanford.edu>
Date: Sun, 16 Jul 2017 00:08:10 +0000 (-0700)
Subject: zip-reader: Fix memory leak on error path in zip_reader_create().
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d600b923ee26399f86e63e6e1a6d90ddaeb571d6;p=pspp

zip-reader: Fix memory leak on error path in zip_reader_create().
---

diff --git a/src/libpspp/zip-reader.c b/src/libpspp/zip-reader.c
index 92a67649fd..0f8c263328 100644
--- a/src/libpspp/zip-reader.c
+++ b/src/libpspp/zip-reader.c
@@ -354,14 +354,19 @@ zip_reader_create (const char *filename, struct string *errs)
       return NULL;
     }
 
-  if (! get_u16 (zr->fr, &disknum)) return NULL;
-  if (! get_u16 (zr->fr, &disknum)) return NULL;
+  if (! get_u16 (zr->fr, &disknum)
+      || ! get_u16 (zr->fr, &disknum)
 
-  if (! get_u16 (zr->fr, &zr->n_members)) return NULL;
-  if (! get_u16 (zr->fr, &total_members)) return NULL;
+      || ! get_u16 (zr->fr, &zr->n_members)
+      || ! get_u16 (zr->fr, &total_members)
 
-  if (! get_u32 (zr->fr, &central_dir_length)) return NULL;
-  if (! get_u32 (zr->fr, &central_dir_start)) return NULL;
+      || ! get_u32 (zr->fr, &central_dir_length)
+      || ! get_u32 (zr->fr, &central_dir_start))
+    {
+      fclose (zr->fr);
+      free (zr);
+      return NULL;
+    }
 
   if ( 0 != fseeko (zr->fr, central_dir_start, SEEK_SET))
     {