summaryrefslogtreecommitdiff
path: root/backport-minizip-Fix-being-unable-to-open-empty-zip-file.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2026-11-07 06:22:11 +0000
committerCoprDistGit <infra@openeuler.org>2026-11-07 06:22:11 +0000
commitd259e194df12569c8fe286eacd285be28118ecd7 (patch)
tree838258e9a13837f135e94257e7d17db9c9218608 /backport-minizip-Fix-being-unable-to-open-empty-zip-file.patch
parentb1143670a63c1a72a4bd0e0e4337fc5fa3be85b4 (diff)
automatic import of zlibopeneuler24.03_LTS_SP3
Diffstat (limited to 'backport-minizip-Fix-being-unable-to-open-empty-zip-file.patch')
-rw-r--r--backport-minizip-Fix-being-unable-to-open-empty-zip-file.patch160
1 files changed, 160 insertions, 0 deletions
diff --git a/backport-minizip-Fix-being-unable-to-open-empty-zip-file.patch b/backport-minizip-Fix-being-unable-to-open-empty-zip-file.patch
new file mode 100644
index 0000000..f574468
--- /dev/null
+++ b/backport-minizip-Fix-being-unable-to-open-empty-zip-file.patch
@@ -0,0 +1,160 @@
+From f209ca7be7981dc8fca79428706057e4ebc929ee Mon Sep 17 00:00:00 2001
+From: RedworkDE <10944644+RedworkDE@users.noreply.github.com>
+Date: Wed, 15 Feb 2023 12:25:33 +0100
+Subject: [PATCH] minizip: Fix being unable to open empty zip file
+
+Reference:https://github.com/madler/zlib/commit/f209ca7be7981dc8fca79428706057e4ebc929ee
+Conflict:NA
+---
+ contrib/minizip/unzip.c | 48 ++++++++++++++++++++++-------------------
+ 1 file changed, 26 insertions(+), 22 deletions(-)
+
+diff --git a/contrib/minizip/unzip.c b/contrib/minizip/unzip.c
+index ad2eb3bc9..3adc692f3 100644
+--- a/contrib/minizip/unzip.c
++++ b/contrib/minizip/unzip.c
+@@ -379,6 +379,10 @@ extern int ZEXPORT unzStringFileNameCompare (const char* fileName1,
+ #define BUFREADCOMMENT (0x400)
+ #endif
+
++#ifndef CENTRALDIRINVALID
++#define CENTRALDIRINVALID ((ZPOS64_T)(-1))
++#endif
++
+ /*
+ Locate the Central directory of a zipfile (at the end, just before
+ the global comment)
+@@ -388,10 +392,10 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+- ZPOS64_T uPosFound=0;
++ ZPOS64_T uPosFound=CENTRALDIRINVALID;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+- return 0;
++ return CENTRALDIRINVALID;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+@@ -401,7 +405,7 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+@@ -431,7 +435,7 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
+ break;
+ }
+
+- if (uPosFound!=0)
++ if (uPosFound!=CENTRALDIRINVALID)
+ break;
+ }
+ TRYFREE(buf);
+@@ -449,12 +453,12 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+- ZPOS64_T uPosFound=0;
++ ZPOS64_T uPosFound=CENTRALDIRINVALID;
+ uLong uL;
+ ZPOS64_T relativeOffset;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+- return 0;
++ return CENTRALDIRINVALID;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+@@ -464,7 +468,7 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+@@ -494,47 +498,47 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
+ break;
+ }
+
+- if (uPosFound!=0)
++ if (uPosFound!=CENTRALDIRINVALID)
+ break;
+ }
+ TRYFREE(buf);
+- if (uPosFound == 0)
+- return 0;
++ if (uPosFound == CENTRALDIRINVALID)
++ return CENTRALDIRINVALID;
+
+ /* Zip64 end of central directory locator */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ /* the signature, already checked */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ /* number of the disk with the start of the zip64 end of central directory */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+- return 0;
++ return CENTRALDIRINVALID;
+ if (uL != 0)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ /* relative offset of the zip64 end of central directory record */
+ if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ /* total number of disks */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+- return 0;
++ return CENTRALDIRINVALID;
+ if (uL != 1)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ /* Goto end of central directory record */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ /* the signature */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ if (uL != 0x06064b50)
+- return 0;
++ return CENTRALDIRINVALID;
+
+ return relativeOffset;
+ }
+@@ -587,7 +591,7 @@ local unzFile unzOpenInternal(const void *path,
+ return NULL;
+
+ central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
+- if (central_pos)
++ if (central_pos!=CENTRALDIRINVALID)
+ {
+ uLong uS;
+ ZPOS64_T uL64;
+@@ -649,7 +653,7 @@ local unzFile unzOpenInternal(const void *path,
+ else
+ {
+ central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
+- if (central_pos==0)
++ if (central_pos==CENTRALDIRINVALID)
+ err=UNZ_ERRNO;
+
+ us.isZip64 = 0;