Просмотр исходного кода

Fix for correct cleanup on read error.

Ryan C. Gordon 23 лет назад
Родитель
Сommit
912ca3266d
1 измененных файлов с 12 добавлено и 10 удалено
  1. 12 10
      archivers/zip.c

+ 12 - 10
archivers/zip.c

@@ -492,7 +492,7 @@ static PHYSFS_sint64 zip_find_end_of_central_dir(void *in, PHYSFS_sint64 *len)
 static int ZIP_isArchive(const char *filename, int forWriting)
 {
     PHYSFS_uint32 sig;
-    int retval;
+    int retval = 0;
     void *in;
 
     in = __PHYSFS_platformOpenRead(filename);
@@ -502,16 +502,18 @@ static int ZIP_isArchive(const char *filename, int forWriting)
      * The first thing in a zip file might be the signature of the
      *  first local file record, so it makes for a quick determination.
      */
-    BAIL_IF_MACRO(!readui32(in, &sig), NULL, 0);
-    retval = (sig == ZIP_LOCAL_FILE_SIG);
-    if (!retval)
+    if (readui32(in, &sig))
     {
-        /*
-         * No sig...might be a ZIP with data at the start
-         *  (a self-extracting executable, etc), so we'll have to do
-         *  it the hard way...
-         */
-        retval = (zip_find_end_of_central_dir(in, NULL) != -1);
+        retval = (sig == ZIP_LOCAL_FILE_SIG);
+        if (!retval)
+        {
+            /*
+             * No sig...might be a ZIP with data at the start
+             *  (a self-extracting executable, etc), so we'll have to do
+             *  it the hard way...
+             */
+            retval = (zip_find_end_of_central_dir(in, NULL) != -1);
+        } /* if */
     } /* if */
 
     __PHYSFS_platformClose(in);