Parcourir la source

Fix bug with copying z_stream objects around in zip archiver (thanks, Andrei!).

zlib expects us to use inflateCopy() to move a z_stream, then inflateEnd()
the original, and apparently fails in later versions if you just try to
memcpy() it.

This is only a bug in the stable-2.0 and stable-1.0 branches; we replaced
zlib with miniz on the development branch, which doesn't have this
requirement (or an inflateCopy() function at all!).
(transplanted from 090cb9c74b87198e6d520afca9d649ca0d84669f)
Ryan C. Gordon il y a 9 ans
Parent
commit
c65c196152
1 fichiers modifiés avec 2 ajouts et 1 suppressions
  1. 2 1
      archivers/zip.c

+ 2 - 1
archivers/zip.c

@@ -368,7 +368,8 @@ static int ZIP_seek(FileHandle *handle, PHYSFS_uint64 offset)
                 return(0);
                 return(0);
 
 
             inflateEnd(&finfo->stream);
             inflateEnd(&finfo->stream);
-            memcpy(&finfo->stream, &str, sizeof (z_stream));
+            inflateCopy(&finfo->stream, &str);
+            inflateEnd(&str);
             finfo->uncompressed_position = finfo->compressed_position = 0;
             finfo->uncompressed_position = finfo->compressed_position = 0;
         } /* if */
         } /* if */