From 9ab2e2efe9ee851b8bcf9d854605382a45fd8ff7 Mon Sep 17 00:00:00 2001 From: Andy Fiddaman Date: Tue, 23 Jan 2024 19:17:27 +0000 Subject: [PATCH] unzip: re-base patches --- .../patches/CVE-2014-8139-crc-overflow.patch | 2 +- .../patches/CVE-2014-8140-test-compr-eb.patch | 2 +- .../patches/CVE-2014-8141-getzip64data.patch | 4 +- .../patches/CVE-2014-9636-test-compr-eb.patch | 2 +- .../CVE-2014-9913-unzip-buffer-overflow.patch | 2 +- .../patches/CVE-2015-7696-heap-overflow.patch | 2 +- .../patches/CVE-2015-7697-infinite-loop.patch | 2 +- ...VE-2016-9844-zipinfo-buffer-overflow.patch | 2 +- ...18-1000035-overflow-password-protect.patch | 2 +- build/unzip/patches/CVE-2019-13232a.patch | 7 ++- build/unzip/patches/CVE-2019-13232b.patch | 49 ++++++++------- build/unzip/patches/CVE-2019-13232c.patch | 25 ++++---- build/unzip/patches/CVE-2019-13232d.patch | 7 ++- build/unzip/patches/CVE-2019-13232e.patch | 7 ++- build/unzip/patches/CVE-2021-4217.patch | 7 ++- build/unzip/patches/CVE-2022-0529-0530.patch | 60 ++++++++----------- build/unzip/patches/configure.patch | 7 ++- build/unzip/patches/fileio-big-files.patch | 7 ++- .../integer-underflow-csiz_decrypted.patch | 2 +- build/unzip/patches/nostrip.patch | 4 +- build/unzip/patches/unix_Makefile.patch | 2 +- 21 files changed, 104 insertions(+), 100 deletions(-) diff --git a/build/unzip/patches/CVE-2014-8139-crc-overflow.patch b/build/unzip/patches/CVE-2014-8139-crc-overflow.patch index c4dd21f910..676e76c482 100644 --- a/build/unzip/patches/CVE-2014-8139-crc-overflow.patch +++ b/build/unzip/patches/CVE-2014-8139-crc-overflow.patch @@ -1,4 +1,4 @@ -diff -wpruN '--exclude=*.orig' a~/extract.c a/extract.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c --- a~/extract.c 1970-01-01 00:00:00 +++ a/extract.c 1970-01-01 00:00:00 @@ -1,5 +1,5 @@ diff --git a/build/unzip/patches/CVE-2014-8140-test-compr-eb.patch b/build/unzip/patches/CVE-2014-8140-test-compr-eb.patch index 7ae1503843..2b7105826e 100644 --- a/build/unzip/patches/CVE-2014-8140-test-compr-eb.patch +++ b/build/unzip/patches/CVE-2014-8140-test-compr-eb.patch @@ -1,4 +1,4 @@ -diff -wpruN '--exclude=*.orig' a~/extract.c a/extract.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c --- a~/extract.c 1970-01-01 00:00:00 +++ a/extract.c 1970-01-01 00:00:00 @@ -2232,10 +2232,17 @@ static int test_compr_eb(__G__ eb, eb_si diff --git a/build/unzip/patches/CVE-2014-8141-getzip64data.patch b/build/unzip/patches/CVE-2014-8141-getzip64data.patch index d072389c18..5fcf47aff9 100644 --- a/build/unzip/patches/CVE-2014-8141-getzip64data.patch +++ b/build/unzip/patches/CVE-2014-8141-getzip64data.patch @@ -1,4 +1,4 @@ -diff -wpruN '--exclude=*.orig' a~/fileio.c a/fileio.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/fileio.c a/fileio.c --- a~/fileio.c 1970-01-01 00:00:00 +++ a/fileio.c 1970-01-01 00:00:00 @@ -176,6 +176,8 @@ static ZCONST char Far FilenameTooLongTr @@ -24,7 +24,7 @@ diff -wpruN '--exclude=*.orig' a~/fileio.c a/fileio.c #ifdef UNICODE_SUPPORT G.unipath_filename = NULL; if (G.UzO.U_flag < 2) { -diff -wpruN '--exclude=*.orig' a~/process.c a/process.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/process.c a/process.c --- a~/process.c 1970-01-01 00:00:00 +++ a/process.c 1970-01-01 00:00:00 @@ -1,5 +1,5 @@ diff --git a/build/unzip/patches/CVE-2014-9636-test-compr-eb.patch b/build/unzip/patches/CVE-2014-9636-test-compr-eb.patch index 595502122b..29ef23fed4 100644 --- a/build/unzip/patches/CVE-2014-9636-test-compr-eb.patch +++ b/build/unzip/patches/CVE-2014-9636-test-compr-eb.patch @@ -1,4 +1,4 @@ -diff -wpruN '--exclude=*.orig' a~/extract.c a/extract.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c --- a~/extract.c 1970-01-01 00:00:00 +++ a/extract.c 1970-01-01 00:00:00 @@ -2228,6 +2228,7 @@ static int test_compr_eb(__G__ eb, eb_si diff --git a/build/unzip/patches/CVE-2014-9913-unzip-buffer-overflow.patch b/build/unzip/patches/CVE-2014-9913-unzip-buffer-overflow.patch index 14be58618b..6738784a98 100644 --- a/build/unzip/patches/CVE-2014-9913-unzip-buffer-overflow.patch +++ b/build/unzip/patches/CVE-2014-9913-unzip-buffer-overflow.patch @@ -5,7 +5,7 @@ Bug-Debian: https://bugs.debian.org/847485 Bug-Ubuntu: https://launchpad.net/bugs/387350 X-Debian-version: 6.0-21 -diff -wpruN '--exclude=*.orig' a~/list.c a/list.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/list.c a/list.c --- a~/list.c 1970-01-01 00:00:00 +++ a/list.c 1970-01-01 00:00:00 @@ -339,7 +339,18 @@ int list_files(__G) /* return PK-type diff --git a/build/unzip/patches/CVE-2015-7696-heap-overflow.patch b/build/unzip/patches/CVE-2015-7696-heap-overflow.patch index 7cc350edcf..46f23c7914 100644 --- a/build/unzip/patches/CVE-2015-7696-heap-overflow.patch +++ b/build/unzip/patches/CVE-2015-7696-heap-overflow.patch @@ -5,7 +5,7 @@ Bug-Debian: https://bugs.debian.org/802162 Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1260944 Origin: https://bugzilla.redhat.com/attachment.cgi?id=1073002 -diff -wpruN '--exclude=*.orig' a~/crypt.c a/crypt.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/crypt.c a/crypt.c --- a~/crypt.c 1970-01-01 00:00:00 +++ a/crypt.c 1970-01-01 00:00:00 @@ -465,7 +465,17 @@ int decrypt(__G__ passwrd) diff --git a/build/unzip/patches/CVE-2015-7697-infinite-loop.patch b/build/unzip/patches/CVE-2015-7697-infinite-loop.patch index d06cc3e21c..e7c01aeecc 100644 --- a/build/unzip/patches/CVE-2015-7697-infinite-loop.patch +++ b/build/unzip/patches/CVE-2015-7697-infinite-loop.patch @@ -5,7 +5,7 @@ Bug-Debian: https://bugs.debian.org/802160 Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1260944 Origin: other, https://bugzilla.redhat.com/attachment.cgi?id=1073339 -diff -wpruN '--exclude=*.orig' a~/extract.c a/extract.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c --- a~/extract.c 1970-01-01 00:00:00 +++ a/extract.c 1970-01-01 00:00:00 @@ -2728,6 +2728,12 @@ __GDEF diff --git a/build/unzip/patches/CVE-2016-9844-zipinfo-buffer-overflow.patch b/build/unzip/patches/CVE-2016-9844-zipinfo-buffer-overflow.patch index 3fb442c15f..ca843815fc 100644 --- a/build/unzip/patches/CVE-2016-9844-zipinfo-buffer-overflow.patch +++ b/build/unzip/patches/CVE-2016-9844-zipinfo-buffer-overflow.patch @@ -4,7 +4,7 @@ Bug-Debian: https://bugs.debian.org/847486 Bug-Ubuntu: https://launchpad.net/bugs/1643750 X-Debian-version: 6.0-21 -diff -wpruN '--exclude=*.orig' a~/zipinfo.c a/zipinfo.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/zipinfo.c a/zipinfo.c --- a~/zipinfo.c 1970-01-01 00:00:00 +++ a/zipinfo.c 1970-01-01 00:00:00 @@ -1921,7 +1921,18 @@ static int zi_short(__G) /* return PK- diff --git a/build/unzip/patches/CVE-2018-1000035-overflow-password-protect.patch b/build/unzip/patches/CVE-2018-1000035-overflow-password-protect.patch index a06dc3f90d..9e81f5b7f2 100644 --- a/build/unzip/patches/CVE-2018-1000035-overflow-password-protect.patch +++ b/build/unzip/patches/CVE-2018-1000035-overflow-password-protect.patch @@ -1,4 +1,4 @@ -diff -wpruN '--exclude=*.orig' a~/fileio.c a/fileio.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/fileio.c a/fileio.c --- a~/fileio.c 1970-01-01 00:00:00 +++ a/fileio.c 1970-01-01 00:00:00 @@ -1,5 +1,5 @@ diff --git a/build/unzip/patches/CVE-2019-13232a.patch b/build/unzip/patches/CVE-2019-13232a.patch index e77b5f0ad8..8310c0b9ea 100644 --- a/build/unzip/patches/CVE-2019-13232a.patch +++ b/build/unzip/patches/CVE-2019-13232a.patch @@ -6,9 +6,10 @@ X-Debian-version: 6.0-24 Fix bug in undefer_input() that misplaced the input state. ---- a/fileio.c -+++ b/fileio.c -@@ -532,8 +532,10 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/fileio.c a/fileio.c +--- a~/fileio.c 1970-01-01 00:00:00 ++++ a/fileio.c 1970-01-01 00:00:00 +@@ -532,8 +532,10 @@ void undefer_input(__G) * This condition was checked when G.incnt_leftover was set > 0 in * defer_leftover_input(), and it is NOT allowed to touch G.csize * before calling undefer_input() when (G.incnt_leftover > 0) diff --git a/build/unzip/patches/CVE-2019-13232b.patch b/build/unzip/patches/CVE-2019-13232b.patch index e7fd7e7a00..cbbadfd15e 100644 --- a/build/unzip/patches/CVE-2019-13232b.patch +++ b/build/unzip/patches/CVE-2019-13232b.patch @@ -27,9 +27,10 @@ X-Debian-version: 6.0-24 This commit depends on a preceding commit: "Fix bug in undefer_input() that misplaced the input state." ---- a/extract.c -+++ b/extract.c -@@ -321,6 +321,125 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c +--- a~/extract.c 1970-01-01 00:00:00 ++++ a/extract.c 1970-01-01 00:00:00 +@@ -321,6 +321,125 @@ static ZCONST char Far UnsupportedExtraF "\nerror: unsupported extra-field compression type (%u)--skipping\n"; static ZCONST char Far BadExtraFieldCRC[] = "error [%s]: bad extra-field CRC %08lx (should be %08lx)\n"; @@ -155,7 +156,7 @@ X-Debian-version: 6.0-24 -@@ -376,6 +495,29 @@ +@@ -376,6 +495,29 @@ int extract_or_test_files(__G) /* ret } #endif /* !SFX || SFX_EXDIR */ @@ -185,7 +186,7 @@ X-Debian-version: 6.0-24 /*--------------------------------------------------------------------------- The basic idea of this function is as follows. Since the central di- rectory lies at the end of the zipfile and the member files lie at the -@@ -593,7 +735,8 @@ +@@ -593,7 +735,8 @@ int extract_or_test_files(__G) /* ret if (error > error_in_archive) error_in_archive = error; /* ...and keep going (unless disk full or user break) */ @@ -195,7 +196,7 @@ X-Debian-version: 6.0-24 /* clear reached_end to signal premature stop ... */ reached_end = FALSE; /* ... and cancel scanning the central directory */ -@@ -1062,6 +1205,11 @@ +@@ -1062,6 +1205,11 @@ static int extract_or_test_entrylist(__G /* seek_zipf(__G__ pInfo->offset); */ request = G.pInfo->offset + G.extra_bytes; @@ -207,7 +208,7 @@ X-Debian-version: 6.0-24 inbuf_offset = request % INBUFSIZ; bufstart = request - inbuf_offset; -@@ -1602,6 +1750,18 @@ +@@ -1602,6 +1750,18 @@ reprompt: return IZ_CTRLC; /* cancel operation by user request */ } #endif @@ -226,7 +227,7 @@ X-Debian-version: 6.0-24 #ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ UserStop(); #endif -@@ -2003,6 +2163,34 @@ +@@ -2003,6 +2163,34 @@ static int extract_or_test_member(__G) } undefer_input(__G); @@ -261,9 +262,10 @@ X-Debian-version: 6.0-24 return error; } /* end function extract_or_test_member() */ ---- a/globals.c -+++ b/globals.c -@@ -181,6 +181,7 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/globals.c a/globals.c +--- a~/globals.c 1970-01-01 00:00:00 ++++ a/globals.c 1970-01-01 00:00:00 +@@ -181,6 +181,7 @@ Uz_Globs *globalsCtor() # if (!defined(NO_TIMESTAMPS)) uO.D_flag=1; /* default to '-D', no restoration of dir timestamps */ # endif @@ -271,9 +273,10 @@ X-Debian-version: 6.0-24 #endif uO.lflag=(-1); ---- a/globals.h -+++ b/globals.h -@@ -260,12 +260,15 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/globals.h a/globals.h +--- a~/globals.h 1970-01-01 00:00:00 ++++ a/globals.h 1970-01-01 00:00:00 +@@ -260,12 +260,15 @@ typedef struct Globals { ecdir_rec ecrec; /* used in unzip.c, extract.c */ z_stat statbuf; /* used by main, mapname, check_for_newer */ @@ -289,9 +292,10 @@ X-Debian-version: 6.0-24 int didCRlast; /* fileio static */ ulg numlines; /* fileio static: number of lines printed */ ---- a/process.c -+++ b/process.c -@@ -637,6 +637,13 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/process.c a/process.c +--- a~/process.c 1970-01-01 00:00:00 ++++ a/process.c 1970-01-01 00:00:00 +@@ -637,6 +637,13 @@ void free_G_buffers(__G) /* releases } #endif @@ -305,7 +309,7 @@ X-Debian-version: 6.0-24 } /* end function free_G_buffers() */ -@@ -1913,6 +1920,8 @@ +@@ -1900,6 +1907,8 @@ int getZip64Data(__G__ ef_buf, ef_len) #define Z64FLGS 0xffff #define Z64FLGL 0xffffffff @@ -314,7 +318,7 @@ X-Debian-version: 6.0-24 if (ef_len == 0 || ef_buf == NULL) return PK_COOL; -@@ -2084,6 +2093,8 @@ +@@ -2071,6 +2080,8 @@ int getUnicodeData(__G__ ef_buf, ef_len) (ZCONST char *)(offset + ef_buf), ULen); G.unipath_filename[ULen] = '\0'; } @@ -323,9 +327,10 @@ X-Debian-version: 6.0-24 } /* Skip this extra field block */ ---- a/unzip.h -+++ b/unzip.h -@@ -645,6 +645,7 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/unzip.h a/unzip.h +--- a~/unzip.h 1970-01-01 00:00:00 ++++ a/unzip.h 1970-01-01 00:00:00 +@@ -645,6 +645,7 @@ typedef struct _Uzp_cdir_Rec { #define PK_NOZIP 9 /* zipfile not found */ #define PK_PARAM 10 /* bad or illegal parameters specified */ #define PK_FIND 11 /* no files found */ diff --git a/build/unzip/patches/CVE-2019-13232c.patch b/build/unzip/patches/CVE-2019-13232c.patch index da1b52a887..b3c58b5b2f 100644 --- a/build/unzip/patches/CVE-2019-13232c.patch +++ b/build/unzip/patches/CVE-2019-13232c.patch @@ -14,9 +14,10 @@ X-Debian-version: 6.0-25 as disallowed locations. This now permits such containers to not raise a zip bomb alert, where in fact there are no overlaps. ---- a/extract.c -+++ b/extract.c -@@ -495,8 +495,11 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c +--- a~/extract.c 1970-01-01 00:00:00 ++++ a/extract.c 1970-01-01 00:00:00 +@@ -495,8 +495,11 @@ int extract_or_test_files(__G) /* ret } #endif /* !SFX || SFX_EXDIR */ @@ -30,7 +31,7 @@ X-Debian-version: 6.0-25 if (G.cover == NULL) { G.cover = malloc(sizeof(cover_t)); if (G.cover == NULL) { -@@ -508,15 +511,25 @@ +@@ -508,15 +511,25 @@ int extract_or_test_files(__G) /* ret ((cover_t *)G.cover)->max = 0; } ((cover_t *)G.cover)->num = 0; @@ -60,9 +61,10 @@ X-Debian-version: 6.0-25 /*--------------------------------------------------------------------------- The basic idea of this function is as follows. Since the central di- ---- a/process.c -+++ b/process.c -@@ -1408,6 +1408,10 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/process.c a/process.c +--- a~/process.c 1970-01-01 00:00:00 ++++ a/process.c 1970-01-01 00:00:00 +@@ -1408,6 +1408,10 @@ static int find_ecrec64(__G__ searchlen) /* Now, we are (almost) sure that we have a Zip64 archive. */ G.ecrec.have_ecr64 = 1; @@ -73,7 +75,7 @@ X-Debian-version: 6.0-25 /* Update the "end-of-central-dir offset" for later checks. */ G.real_ecrec_offset = ecrec64_start_offset; -@@ -1542,6 +1546,8 @@ +@@ -1542,6 +1546,8 @@ static int find_ecrec(__G__ searchlen) makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]); G.ecrec.zipfile_comment_length = makeword(&byterec[ZIPFILE_COMMENT_LENGTH]); @@ -82,9 +84,10 @@ X-Debian-version: 6.0-25 /* Now, we have to read the archive comment, BEFORE the file pointer is moved away backwards to seek for a Zip64 ECLOC64 structure. ---- a/unzpriv.h -+++ b/unzpriv.h -@@ -2185,6 +2185,16 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/unzpriv.h a/unzpriv.h +--- a~/unzpriv.h 1970-01-01 00:00:00 ++++ a/unzpriv.h 1970-01-01 00:00:00 +@@ -2185,6 +2185,16 @@ typedef struct VMStimbuf { int have_ecr64; /* valid Zip64 ecdir-record exists */ int is_zip64_archive; /* Zip64 ecdir-record is mandatory */ ush zipfile_comment_length; diff --git a/build/unzip/patches/CVE-2019-13232d.patch b/build/unzip/patches/CVE-2019-13232d.patch index cb06f88096..be5bcc385c 100644 --- a/build/unzip/patches/CVE-2019-13232d.patch +++ b/build/unzip/patches/CVE-2019-13232d.patch @@ -10,9 +10,10 @@ X-Debian-version: 6.0-26 could result in a false overlapped element detection when a small bzip2-compressed file was unzipped. This commit remedies that. ---- a/extract.c -+++ b/extract.c -@@ -3052,7 +3052,7 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c +--- a~/extract.c 1970-01-01 00:00:00 ++++ a/extract.c 1970-01-01 00:00:00 +@@ -3051,7 +3051,7 @@ __GDEF #endif G.inptr = (uch *)bstrm.next_in; diff --git a/build/unzip/patches/CVE-2019-13232e.patch b/build/unzip/patches/CVE-2019-13232e.patch index 10ec7ccbe1..fcffebb617 100644 --- a/build/unzip/patches/CVE-2019-13232e.patch +++ b/build/unzip/patches/CVE-2019-13232e.patch @@ -10,9 +10,10 @@ X-Debian-version: 6.0-26 deflate-compressed file was unzipped using an old zlib. This commit remedies that. ---- a/inflate.c -+++ b/inflate.c -@@ -700,7 +700,7 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/inflate.c a/inflate.c +--- a~/inflate.c 1970-01-01 00:00:00 ++++ a/inflate.c 1970-01-01 00:00:00 +@@ -700,7 +700,7 @@ int UZinflate(__G__ is_defl64) G.dstrm.total_out)); G.inptr = (uch *)G.dstrm.next_in; diff --git a/build/unzip/patches/CVE-2021-4217.patch b/build/unzip/patches/CVE-2021-4217.patch index b8156a68df..8b2df74022 100644 --- a/build/unzip/patches/CVE-2021-4217.patch +++ b/build/unzip/patches/CVE-2021-4217.patch @@ -5,9 +5,10 @@ As can be seen in fileio.c:3326 patch is already implemented here but not in pro I will try to ask Steven Schweda (maintainer) why it is so. ---- a/process.c 2022-02-28 21:31:13.665727140 +0000 -+++ b/process.c 2022-02-28 21:32:11.636401015 +0000 -@@ -2626,6 +2626,11 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/process.c a/process.c +--- a~/process.c 1970-01-01 00:00:00 ++++ a/process.c 1970-01-01 00:00:00 +@@ -2051,6 +2051,11 @@ int getUnicodeData(__G__ ef_buf, ef_len) G.unipath_checksum = makelong(offset + ef_buf); offset += 4; diff --git a/build/unzip/patches/CVE-2022-0529-0530.patch b/build/unzip/patches/CVE-2022-0529-0530.patch index 8f5351e8cd..5ee66ad14e 100644 --- a/build/unzip/patches/CVE-2022-0529-0530.patch +++ b/build/unzip/patches/CVE-2022-0529-0530.patch @@ -3,9 +3,10 @@ Subject: Fix for CVE-2022-0529 and CVE-2022-0530 Bug-Debian: https://bugs.debian.org/1010355 X-Debian-version: 6.0-27 ---- a/fileio.c -+++ b/fileio.c -@@ -171,8 +171,10 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/fileio.c a/fileio.c +--- a~/fileio.c 1970-01-01 00:00:00 ++++ a/fileio.c 1970-01-01 00:00:00 +@@ -171,8 +171,10 @@ static ZCONST char Far ReadError[] = "er static ZCONST char Far FilenameTooLongTrunc[] = "warning: filename too long--truncating.\n"; #ifdef UNICODE_SUPPORT @@ -17,13 +18,10 @@ X-Debian-version: 6.0-27 #endif static ZCONST char Far ExtraFieldTooLong[] = "warning: extra field too long (%d). Ignoring...\n"; -@@ -2361,16 +2363,30 @@ +@@ -2354,6 +2356,19 @@ int do_string(__G__ length, option) /* /* convert UTF-8 to local character set */ fn = utf8_to_local_string(G.unipath_filename, G.unicode_escape_all); -- /* make sure filename is short enough */ -- if (strlen(fn) >= FILNAMSIZ) { -- fn[FILNAMSIZ - 1] = '\0'; + + /* 2022-07-22 SMS, et al. CVE-2022-0530 + * Detect conversion failure, emit message. @@ -31,34 +29,27 @@ X-Debian-version: 6.0-27 + */ + if (fn == NULL) + { - Info(slide, 0x401, ((char *)slide, -- LoadFarString(UFilenameTooLongTrunc))); -- error = PK_WARN; ++ Info(slide, 0x401, ((char *)slide, + LoadFarString(UFilenameCorrupt))); + error = PK_ERR; + } + else + { -+ /* make sure filename is short enough */ -+ if (strlen(fn) >= FILNAMSIZ) { -+ fn[FILNAMSIZ - 1] = '\0'; -+ Info(slide, 0x401, ((char *)slide, -+ LoadFarString(UFilenameTooLongTrunc))); -+ error = PK_WARN; -+ } -+ /* replace filename with converted UTF-8 */ -+ strcpy(G.filename, fn); -+ free(fn); - } -- /* replace filename with converted UTF-8 */ -- strcpy(G.filename, fn); -- free(fn); + /* make sure filename is short enough */ + if (strlen(fn) >= FILNAMSIZ) { + fn[FILNAMSIZ - 1] = '\0'; +@@ -2365,6 +2380,7 @@ int do_string(__G__ length, option) /* + strcpy(G.filename, fn); + free(fn); } ++ } # endif /* UNICODE_WCHAR */ if (G.unipath_filename != G.filename_full) ---- a/process.c -+++ b/process.c -@@ -222,6 +222,8 @@ + free(G.unipath_filename); +diff -wpruN --no-dereference '--exclude=*.orig' a~/process.c a/process.c +--- a~/process.c 1970-01-01 00:00:00 ++++ a/process.c 1970-01-01 00:00:00 +@@ -222,6 +222,8 @@ static ZCONST char Far ZipfileCommTrunc1 "\nwarning: Unicode Path version > 1\n"; static ZCONST char Far UnicodeMismatchError[] = "\nwarning: Unicode Path checksum invalid\n"; @@ -67,7 +58,7 @@ X-Debian-version: 6.0-27 #endif -@@ -1915,7 +1917,7 @@ +@@ -1902,7 +1904,7 @@ int getZip64Data(__G__ ef_buf, ef_len) Sets both local header and central header fields. Not terribly clever, but it means that this procedure is only called in one place. @@ -76,7 +67,7 @@ X-Debian-version: 6.0-27 Added checks to ensure that enough data are available before calling makeint64() or makelong(). Replaced various sizeof() values with simple ("4" or "8") constants. (The Zip64 structures do not depend -@@ -1947,9 +1949,10 @@ +@@ -1934,9 +1936,10 @@ int getZip64Data(__G__ ef_buf, ef_len) ef_len - EB_HEADSIZE)); break; } @@ -88,7 +79,7 @@ X-Debian-version: 6.0-27 if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL)) { -@@ -2046,7 +2049,7 @@ +@@ -2033,7 +2036,7 @@ int getUnicodeData(__G__ ef_buf, ef_len) } if (eb_id == EF_UNIPATH) { @@ -97,7 +88,7 @@ X-Debian-version: 6.0-27 ush ULen = eb_len - 5; ulg chksum = CRCVAL_INITIAL; -@@ -2504,16 +2507,17 @@ +@@ -2496,16 +2499,17 @@ char *wide_to_local_string(wide_string, int state_dependent; int wsize = 0; int max_bytes = MB_CUR_MAX; @@ -118,7 +109,7 @@ X-Debian-version: 6.0-27 return NULL; } -@@ -2551,8 +2555,28 @@ +@@ -2543,8 +2547,28 @@ char *wide_to_local_string(wide_string, } else { /* no MB for this wide */ /* use escape for wide character */ @@ -149,13 +140,12 @@ X-Debian-version: 6.0-27 free(escape_string); } } -@@ -2604,9 +2628,18 @@ +@@ -2596,9 +2620,18 @@ char *utf8_to_local_string(utf8_string, ZCONST char *utf8_string; int escape_all; { - zwchar *wide = utf8_to_wide_string(utf8_string); - char *loc = wide_to_local_string(wide, escape_all); -- free(wide); + zwchar *wide; + char *loc = NULL; + @@ -165,7 +155,7 @@ X-Debian-version: 6.0-27 + if (wide != NULL) + { + loc = wide_to_local_string( wide, escape_all); -+ free( wide); + free(wide); + } + return loc; diff --git a/build/unzip/patches/configure.patch b/build/unzip/patches/configure.patch index 8b3c92e010..520e643583 100644 --- a/build/unzip/patches/configure.patch +++ b/build/unzip/patches/configure.patch @@ -1,6 +1,7 @@ ---- a/unix/configure~ 2024-01-23 18:53:07.146124861 +0000 -+++ a/unix/configure 2024-01-23 18:53:51.665682899 +0000 -@@ -588,9 +588,9 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/unix/configure a/unix/configure +--- a~/unix/configure 1970-01-01 00:00:00 ++++ a/unix/configure 1970-01-01 00:00:00 +@@ -588,9 +588,9 @@ rm -f a.out conftest.c conftest.o confte # bzip2 echo "Check bzip2 support" diff --git a/build/unzip/patches/fileio-big-files.patch b/build/unzip/patches/fileio-big-files.patch index 55a115af77..933b4b74b4 100644 --- a/build/unzip/patches/fileio-big-files.patch +++ b/build/unzip/patches/fileio-big-files.patch @@ -3,9 +3,10 @@ Subject: Fix lame code in fileio.c Bug-Debian: https://bugs.debian.org/929502 X-Debian-version: 6.0-23 ---- a/fileio.c -+++ b/fileio.c -@@ -2477,6 +2477,7 @@ +diff -wpruN --no-dereference '--exclude=*.orig' a~/fileio.c a/fileio.c +--- a~/fileio.c 1970-01-01 00:00:00 ++++ a/fileio.c 1970-01-01 00:00:00 +@@ -2470,6 +2470,7 @@ zusz_t makeint64(sig) */ return (((zusz_t)sig[7]) << 56) + (((zusz_t)sig[6]) << 48) diff --git a/build/unzip/patches/integer-underflow-csiz_decrypted.patch b/build/unzip/patches/integer-underflow-csiz_decrypted.patch index 306c37b51d..852dde4373 100644 --- a/build/unzip/patches/integer-underflow-csiz_decrypted.patch +++ b/build/unzip/patches/integer-underflow-csiz_decrypted.patch @@ -3,7 +3,7 @@ From: Kamil Dudka Date: Tue, 22 Sep 2015 18:52:23 +0200 Subject: [PATCH] extract: prevent unsigned overflow on invalid input -diff -wpruN '--exclude=*.orig' a~/extract.c a/extract.c +diff -wpruN --no-dereference '--exclude=*.orig' a~/extract.c a/extract.c --- a~/extract.c 1970-01-01 00:00:00 +++ a/extract.c 1970-01-01 00:00:00 @@ -1257,8 +1257,17 @@ static int extract_or_test_entrylist(__G diff --git a/build/unzip/patches/nostrip.patch b/build/unzip/patches/nostrip.patch index 3d1c18a194..44579f66bf 100644 --- a/build/unzip/patches/nostrip.patch +++ b/build/unzip/patches/nostrip.patch @@ -1,4 +1,4 @@ -diff -wpruN '--exclude=*.orig' a~/unix/Makefile a/unix/Makefile +diff -wpruN --no-dereference '--exclude=*.orig' a~/unix/Makefile a/unix/Makefile --- a~/unix/Makefile 1970-01-01 00:00:00 +++ a/unix/Makefile 1970-01-01 00:00:00 @@ -52,7 +52,7 @@ CF_NOOPT = -I. -I$(IZ_BZIP2) -DUNIX $(LO @@ -19,7 +19,7 @@ diff -wpruN '--exclude=*.orig' a~/unix/Makefile a/unix/Makefile E = O = .o M = unix -diff -wpruN '--exclude=*.orig' a~/unix/configure a/unix/configure +diff -wpruN --no-dereference '--exclude=*.orig' a~/unix/configure a/unix/configure --- a~/unix/configure 1970-01-01 00:00:00 +++ a/unix/configure 1970-01-01 00:00:00 @@ -17,7 +17,7 @@ CFLAGSR=${CFLAGS} diff --git a/build/unzip/patches/unix_Makefile.patch b/build/unzip/patches/unix_Makefile.patch index edfb5ba6e5..f393b38dee 100644 --- a/build/unzip/patches/unix_Makefile.patch +++ b/build/unzip/patches/unix_Makefile.patch @@ -1,4 +1,4 @@ -diff -wpruN '--exclude=*.orig' a~/unix/Makefile a/unix/Makefile +diff -wpruN --no-dereference '--exclude=*.orig' a~/unix/Makefile a/unix/Makefile --- a~/unix/Makefile 1970-01-01 00:00:00 +++ a/unix/Makefile 1970-01-01 00:00:00 @@ -121,9 +121,9 @@ INSTALL_PROGRAM = $(INSTALL)