Przeglądaj źródła

7z: Make error handling a little more robust.

Ryan C. Gordon 5 lat temu
rodzic
commit
22297e7ea2
1 zmienionych plików z 5 dodań i 2 usunięć
  1. 5 2
      src/physfs_archiver_7z.c

+ 5 - 2
src/physfs_archiver_7z.c

@@ -285,13 +285,16 @@ static PHYSFS_Io *SZIP_openRead(void *opaque, const char *path)
                         &blockIndex, &outBuffer, &outBufferSize, &offset,
                         &blockIndex, &outBuffer, &outBufferSize, &offset,
                         &outSizeProcessed, alloc, alloc);
                         &outSizeProcessed, alloc, alloc);
     GOTO_IF(rc != SZ_OK, szipErrorCode(rc), SZIP_openRead_failed);
     GOTO_IF(rc != SZ_OK, szipErrorCode(rc), SZIP_openRead_failed);
+    GOTO_IF(outBuffer == NULL, PHYSFS_ERR_OUT_OF_MEMORY, SZIP_openRead_failed);
 
 
     io->destroy(io);
     io->destroy(io);
     io = NULL;
     io = NULL;
 
 
-    buf = allocator.Malloc(outSizeProcessed);
+    buf = allocator.Malloc(outSizeProcessed ? outSizeProcessed : 1);
     GOTO_IF(buf == NULL, PHYSFS_ERR_OUT_OF_MEMORY, SZIP_openRead_failed);
     GOTO_IF(buf == NULL, PHYSFS_ERR_OUT_OF_MEMORY, SZIP_openRead_failed);
-    memcpy(buf, outBuffer + offset, outSizeProcessed);
+
+    if (outSizeProcessed > 0)
+        memcpy(buf, outBuffer + offset, outSizeProcessed);
 
 
     alloc->Free(alloc, outBuffer);
     alloc->Free(alloc, outBuffer);
     outBuffer = NULL;
     outBuffer = NULL;