Bläddra i källkod

Fixed dereference of free()'d memory.

Thanks to Evgeny Podjachev for the fix!
Ryan C. Gordon 14 år sedan
förälder
incheckning
a42ada1380
1 ändrade filer med 6 tillägg och 5 borttagningar
  1. 6 5
      src/archiver_dir.c

+ 6 - 5
src/archiver_dir.c

@@ -64,20 +64,21 @@ static PHYSFS_Io *doOpen(dvoid *opaque, const char *name,
     if (fileExists == NULL)
         fileExists = &existtmp;
 
-    *fileExists = 0;
-
     BAIL_IF_MACRO(f == NULL, NULL, NULL);
 
     io = __PHYSFS_createNativeIo(f, mode);
-    allocator.Free(f);
     if (io == NULL)
     {
         PHYSFS_Stat statbuf;  /* !!! FIXME: this changes the error message. */
         __PHYSFS_platformStat(f, fileExists, &statbuf);
-        return NULL;
     } /* if */
+    else
+    {
+        *fileExists = 1;
+    } /* else */
+
+    allocator.Free(f);
 
-    *fileExists = 1;
     return io;
 } /* doOpen */