diff --git a/system/base/zip/files/zip-3.0-currdir.patch b/system/base/zip/files/zip-3.0-currdir.patch
new file mode 100644
index 00000000..40da32e7
--- /dev/null
+++ b/system/base/zip/files/zip-3.0-currdir.patch
@@ -0,0 +1,12 @@
+diff -up zip30/util.c.currdir zip30/util.c
+--- zip30/util.c.currdir 2009-11-16 12:42:17.783961701 +0100
++++ zip30/util.c 2009-11-16 12:42:58.185960707 +0100
+@@ -493,6 +493,8 @@ int cs; /* force case-se
+ /* Compare the sh pattern p with the string s and return true if they match,
+ false if they don't or if there is a syntax error in the pattern. */
+ {
++ while (s[0] == '.' && s[1] == '/')
++ s += 2; /* strip redundant leading "./" sections */
+ return recmatch(p, s, cs) == 1;
+ }
+
diff --git a/system/base/zip/files/zip-3.0-exec-shield.patch b/system/base/zip/files/zip-3.0-exec-shield.patch
new file mode 100644
index 00000000..05c1a6c4
--- /dev/null
+++ b/system/base/zip/files/zip-3.0-exec-shield.patch
@@ -0,0 +1,20 @@
+diff -up zip30/crc_i386.S.exec_shield zip30/crc_i386.S
+--- zip30/crc_i386.S.exec_shield 2009-11-13 18:37:45.000000000 +0100
++++ zip30/crc_i386.S 2009-11-13 18:39:54.435390166 +0100
+@@ -302,3 +302,6 @@ _crc32: /* ulg c
+ #endif /* i386 || _i386 || _I386 || __i386 */
+
+ #endif /* !USE_ZLIB && !CRC_TABLE_ONLY */
++
++.section .note.GNU-stack, "", @progbits
++.previous
+diff -up zip30/match.S.exec_shield zip30/match.S
+--- zip30/match.S.exec_shield 2005-01-28 10:40:14.000000000 +0100
++++ zip30/match.S 2009-11-13 18:39:48.570389058 +0100
+@@ -405,3 +405,6 @@ L__return:
+ #endif /* i386 || _I386 || _i386 || __i386 */
+
+ #endif /* !USE_ZLIB */
++
++.section .note.GNU-stack, "", @progbits
++.previous
diff --git a/system/base/zip/files/zip-3.0-format-security.patch b/system/base/zip/files/zip-3.0-format-security.patch
new file mode 100644
index 00000000..54ce2e66
--- /dev/null
+++ b/system/base/zip/files/zip-3.0-format-security.patch
@@ -0,0 +1,20 @@
+--- a/zip.c
++++ a/zip.c
+@@ -1028,7 +1028,7 @@ local void help_extended()
+
+ for (i = 0; i < sizeof(text)/sizeof(char *); i++)
+ {
+- printf(text[i]);
++ printf("%s", text[i]);
+ putchar('\n');
+ }
+ #ifdef DOS
+@@ -1225,7 +1225,7 @@ local void version_info()
+ CR_MAJORVER, CR_MINORVER, CR_BETA_VER, CR_VERSION_DATE);
+ for (i = 0; i < sizeof(cryptnote)/sizeof(char *); i++)
+ {
+- printf(cryptnote[i]);
++ printf("%s", cryptnote[i]);
+ putchar('\n');
+ }
+ ++i; /* crypt support means there IS at least one compilation option */
diff --git a/system/base/zip/files/zipnote.patch b/system/base/zip/files/zipnote.patch
new file mode 100644
index 00000000..4177a7df
--- /dev/null
+++ b/system/base/zip/files/zipnote.patch
@@ -0,0 +1,13 @@
+diff --git a/zipnote.c b/zipnote.c
+index 5e02cb6..996f012 100644
+--- a/zipnote.c
++++ b/zipnote.c
+@@ -661,7 +661,7 @@ char **argv; /* command line tokens */
+ if ((r = zipcopy(z)) != ZE_OK)
+ ziperr(r, "was copying an entry");
+ }
+- fclose(x);
++ fclose(in_file);
+
+ /* Write central directory and end of central directory with new comments */
+ if ((c = zftello(y)) == (zoff_t)-1) /* get start of central */
diff --git a/system/base/zip/pspec.xml b/system/base/zip/pspec.xml
index bce91746..e887445b 100644
--- a/system/base/zip/pspec.xml
+++ b/system/base/zip/pspec.xml
@@ -13,6 +13,12 @@
Info ZIP (encryption support)
Zip is a compression and file packaging/archive utility. Zip is useful for packaging a set of files for distribution, for archiving files, and for saving disk space by temporarily compressing unused files or directories.
https://ftp.osuosl.org/pub/blfs/conglomeration/zip/zip30.tar.gz
+
+ zip-3.0-currdir.patch
+ zip-3.0-exec-shield.patch
+ zip-3.0-format-security.patch
+ zipnote.patch
+
@@ -28,6 +34,13 @@
+
+ 2024-09-03
+ 3.0
+ Rebuild
+ PisiLinux Community
+ admin@pisilinux.org
+
2020-12-09
3.0