- Update to 6.0:

*  Support PKWARE ZIP64 extensions, allowing Zip archives and Zip archive
     entries larger than 4 GiBytes and more than 65536 entries within a
     single Zip archive.  This support is currently only available for Unix,
     OpenVMS and Win32/Win64.
  * Support for bzip2 compression method.
  * Support for UTF-8 encoded entry names, both through PKWARE's "General
    Purpose Flags Bit 11" indicator and Info-ZIP's new "up" unicode path
    extra field.  (Currently, on Windows the UTF-8 handling is limited to
    the character subset contained in the configured non-unicode "system
    code page".)
  * Fixed "Time of Creation/Time of Use" vulnerability when setting
    attributes of extracted files, for Unix and Unix-like ports.
  * Fixed memory leak when processing invalid deflated data.
  * Fixed long-standing bug in unshrink (partial_clear), added boundary
    checks against invalid compressed data.
  * On Unix, keep inherited SGID attribute bit for extracted directories
    unless restoration of owner/group id or SUID/SGID/Tacky attributes was
    requested.
  * On Unix, allow extracted filenames to contain embedded control
    characters when explicitly requested by specifying the new command line
    option "-^".
  * On Unix, support restoration of symbolic link attributes.
  * On Unix, support restoration of 32-bit UID/GID data using the new "ux"
    IZUNIX3 extra field introduced with Zip 3.0.
  * Support symbolic links zipped up on VMS.
  * New -D option to suppress restoration of timestamps for extracted
    directory entries (on those ports that support setting of directory
    timestamps).  By specifying "-DD", this new option also allows to
    suppress timestamp restoration for ALL extracted files on all UnZip
    ports which support restoration of timestamps.  On VMS, the default
    behaviour is now to skip restoration of directory timestamps; here,
    "--D" restores ALL timestamps, "-D" restores none.
  * On OS/2, Win32, and Unix, the (previously optional) feature UNIXBACKUP
    to allow saving backup copies of overwritten files on extraction is now
    enabled by default.

OBS-URL: https://build.opensuse.org/package/show/Archiving/unzip?expand=0&rev=8
This commit is contained in:
Philipp Thomas 2010-05-21 14:47:23 +00:00 committed by Git OBS Bridge
parent 94175f1a3d
commit ae7f693109
14 changed files with 208 additions and 488 deletions

View File

@ -1,50 +0,0 @@
--- inflate.c 2005-02-27 06:08:46.000000000 +0000
+++ inflate.c 2006-07-19 21:45:33.543595000 +0100
@@ -983,6 +983,7 @@
unsigned l; /* last length */
unsigned m; /* mask for bit lengths table */
unsigned n; /* number of lengths to get */
+ struct huft *tlp;
struct huft *tl; /* literal/length code table */
struct huft *td; /* distance code table */
unsigned bl; /* lookup bits for tl */
@@ -996,6 +997,8 @@
int retval = 0; /* error code returned: initialized to "no error" */
+ td = tlp = tl = (struct huft *)NULL;
+
/* make local bit buffer */
Trace((stderr, "\ndynamic block"));
b = G.bb;
@@ -1047,9 +1050,9 @@
while (i < n)
{
NEEDBITS(bl)
- j = (td = tl + ((unsigned)b & m))->b;
+ j = (tlp = tl + ((unsigned)b & m))->b;
DUMPBITS(j)
- j = td->v.n;
+ j = tlp->v.n;
if (j < 16) /* length of code in bits (0..15) */
ll[i++] = l = j; /* save last length in l */
else if (j == 16) /* repeat last length 3 to 6 times */
@@ -1141,6 +1144,7 @@
huft_free(td);
}
huft_free(tl);
+
return retval;
}
@@ -1149,8 +1153,8 @@
cleanup_and_exit:
/* free the decoding tables, return */
- huft_free(tl);
- huft_free(td);
+ if (tl) huft_free(tl);
+ if (td) huft_free(td);
return retval;
}

View File

@ -1,17 +1,17 @@
--- process.c
+++ process.c
@@ -156,8 +156,8 @@
Index: process.c
===================================================================
--- process.c.orig 2009-03-06 02:25:10.000000000 +0100
+++ process.c 2010-05-21 13:17:28.292590863 +0200
@@ -203,6 +203,8 @@ static ZCONST char Far Cent64EndSigSearc
#endif
static ZCONST char Far ZipfileCommTrunc1[] =
"\ncaution: zipfile comment truncated\n";
-
-
+static ZCONST char Far FileNameTooLong[] =
+ "%s: error: %s (truncated): %s\n";
/*******************************/
/* Function process_zipfiles() */
@@ -314,6 +314,17 @@
#ifndef NO_ZIPINFO
static ZCONST char Far NoZipfileComment[] =
"There is no zipfile comment.\n";
@@ -390,6 +392,17 @@ int process_zipfiles(__G) /* return P
lastzipfn = G.zipfn;

View File

@ -4,7 +4,7 @@ Description: Provides header file
Index: dsrecode.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ dsrecode.c 2010-05-10 18:00:17.972091018 +0200
+++ dsrecode.c 2010-05-21 14:25:19.192590879 +0200
@@ -0,0 +1,137 @@
+#include <librcc.h>
+
@ -145,9 +145,9 @@ Index: dsrecode.c
+}
Index: fileio.c
===================================================================
--- fileio.c.orig 2010-05-10 18:00:17.912090858 +0200
+++ fileio.c 2010-05-10 18:00:17.976090793 +0200
@@ -78,7 +78,7 @@
--- fileio.c.orig 2010-05-21 14:25:19.172590765 +0200
+++ fileio.c 2010-05-21 14:25:19.192590879 +0200
@@ -82,7 +82,7 @@
# endif
#endif
#include "ebcdic.h" /* definition/initialization of ebcdic[] */
@ -158,9 +158,9 @@ Index: fileio.c
Note: Under Windows, the maximum size of the buffer that can be used
Index: unzpriv.h
===================================================================
--- unzpriv.h.orig 2010-05-10 18:00:17.848090721 +0200
+++ unzpriv.h 2010-05-10 18:00:18.016090830 +0200
@@ -2582,10 +2582,11 @@ char *GetLoadPath OF((__GPRO));
--- unzpriv.h.orig 2010-05-21 14:24:55.632590821 +0200
+++ unzpriv.h 2010-05-21 14:25:19.220590722 +0200
@@ -3025,10 +3025,11 @@ char *GetLoadPath OF((__GPRO));
!(((islochdr) || (isuxatt)) && \
((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \
(hostnum) == FS_HPFS_ || \

View File

@ -1,36 +0,0 @@
--- unix/unix.c
+++ unix/unix.c
@@ -1042,6 +1042,16 @@
ush z_uidgid[2];
int have_uidgid_flg;
+/*---------------------------------------------------------------------------
+ Change the file permissions from default ones to those stored in the
+ zipfile. This has to done *before* closing the file.
+ ---------------------------------------------------------------------------*/
+
+#ifndef NO_CHMOD
+ if (chmod(G.filename, filtattr(__G__ G.pInfo->file_attr)))
+ perror("chmod (file attributes) error");
+#endif
+
fclose(G.outfile);
/*---------------------------------------------------------------------------
@@ -1151,16 +1161,6 @@
#endif /* ?AOS_VS */
}
-/*---------------------------------------------------------------------------
- Change the file permissions from default ones to those stored in the
- zipfile.
- ---------------------------------------------------------------------------*/
-
-#ifndef NO_CHMOD
- if (chmod(G.filename, filtattr(__G__ G.pInfo->file_attr)))
- perror("chmod (file attributes) error");
-#endif
-
} /* end function close_outfile() */
#endif /* !MTS */

View File

@ -1,6 +1,8 @@
--- unzip-5.52/ebcdic.h
+++ unzip-5.52/ebcdic.h
@@ -254,6 +254,25 @@
Index: ebcdic.h
===================================================================
--- ebcdic.h.orig 2008-03-21 13:04:22.000000000 +0100
+++ ebcdic.h 2010-05-21 14:07:51.000091055 +0200
@@ -254,6 +254,25 @@ ZCONST uch Far iso2oem_850[] = {
0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* F0 - F7 */
0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* F8 - FF */
};
@ -26,7 +28,7 @@
#endif /* IZ_ISO2OEM_ARRAY */
#ifdef IZ_OEM2ISO_ARRAY
@@ -275,8 +294,28 @@
@@ -275,6 +294,25 @@ ZCONST uch Far oem2iso_850[] = {
0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */
0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */
};
@ -51,22 +53,21 @@
+};
#endif /* IZ_OEM2ISO_ARRAY */
+
#if defined(THEOS) || defined(THEOS_SUPPORT)
# include "theos/charconv.h"
#endif
--- unzip-5.52/man/unzip.1
+++ unzip-5.52/man/unzip.1
/* The following pointers to the OEM<-->ISO translation tables are used
Index: man/unzip.1
===================================================================
--- man/unzip.1.orig 2009-04-20 02:33:10.000000000 +0200
+++ man/unzip.1 2010-05-21 14:23:25.824590928 +0200
@@ -25,7 +25,7 @@
unzip \- list, test and extract compressed files in a ZIP archive
.PD
.SH SYNOPSIS
-\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCKLMVWX$/:\fP]]
+\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCKLMOVX$/:\fP]]
-\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCDKLMUVWX$/:^\fP]]
+\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCDKLMOUVWX$/:^\fP]]
\fIfile\fP[\fI.zip\fP] [\fIfile(s)\fP\ .\|.\|.]
[\fB\-x\fP\ \fIxfile(s)\fP\ .\|.\|.] [\fB\-d\fP\ \fIexdir\fP]
.PD
@@ -342,6 +342,9 @@
@@ -386,6 +386,9 @@ of \fIzip\fP(1L), which stores filenotes
overwrite existing files without prompting. This is a dangerous option, so
use it with care. (It is often used with \fB\-f\fP, however, and is the only
way to overwrite directory EAs under OS/2.)
@ -76,9 +77,11 @@
.IP \fB\-P\fP\ \fIpassword\fP
use \fIpassword\fP to decrypt encrypted zipfile entries (if any). \fBTHIS IS
INSECURE!\fP Many multi-user operating systems provide ways for any user to
--- unzip-5.52/unzip.c
+++ unzip-5.52/unzip.c
@@ -1327,6 +1327,12 @@
Index: unzip.c
===================================================================
--- unzip.c.orig 2009-04-16 20:26:52.000000000 +0200
+++ unzip.c 2010-05-21 14:23:25.824590928 +0200
@@ -1592,6 +1592,12 @@ int uz_opts(__G__ pargc, pargv)
} else
++uO.overwrite_all;
break;
@ -91,9 +94,11 @@
case ('p'): /* pipes: extract to stdout, no messages */
if (negative) {
uO.cflag = FALSE;
--- unzip-5.52/unzip.h
+++ unzip-5.52/unzip.h
@@ -462,6 +462,7 @@
Index: unzip.h
===================================================================
--- unzip.h.orig 2009-02-15 19:12:54.000000000 +0100
+++ unzip.h 2010-05-21 14:23:25.824590928 +0200
@@ -502,6 +502,7 @@ typedef struct _UzpOpts {
int K_flag; /* -K: keep setuid/setgid/tacky permissions */
#endif
int lflag; /* -12slmv: listing format (zipinfo) */
@ -101,15 +106,17 @@
int L_flag; /* -L: convert filenames from some OSes to lowercase */
int overwrite_none; /* -n: never overwrite files (no prompting) */
#ifdef AMIGA
--- unzip-5.52/unzpriv.h
+++ unzip-5.52/unzpriv.h
@@ -2456,8 +2456,15 @@
Index: unzpriv.h
===================================================================
--- unzpriv.h.orig 2009-04-20 01:59:26.000000000 +0200
+++ unzpriv.h 2010-05-21 14:24:02.641090783 +0200
@@ -2899,8 +2899,15 @@ char *GetLoadPath OF((__GPRO));
# define IZ_ISO2OEM_ARRAY
# endif
# define _ISO_INTERN(str1) {register uch *p;\
# define _ISO_INTERN(str1) if (iso2oem) {register uch *p;\
- for (p=(uch *)(str1); *p; p++)\
- *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p);}
+ if (uO.iso8859_2 == FASLE) { \
+ if (uO.iso8859_2 == FALSE) { \
+ for (p=(uch *)(str1); *p; p++) \
+ *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p); \
+ } \
@ -121,10 +128,10 @@
# else
# define _ISO_INTERN(str1) A_TO_N(str1)
# endif
@@ -2471,8 +2478,15 @@
@@ -2914,8 +2921,15 @@ char *GetLoadPath OF((__GPRO));
# define IZ_OEM2ISO_ARRAY
# endif
# define _OEM_INTERN(str1) {register uch *p;\
# define _OEM_INTERN(str1) if (oem2iso) {register uch *p;\
- for (p=(uch *)(str1); *p; p++)\
- *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);}
+ if (uO.iso8859_2 == FALSE) { \
@ -139,37 +146,36 @@
# endif
#endif
@@ -2497,7 +2511,9 @@
#if (!defined(INTERN_TO_ISO) && !defined(ASCII2ISO))
# ifdef CRTL_CP_IS_OEM
@@ -2942,6 +2956,7 @@ char *GetLoadPath OF((__GPRO));
/* know: "ASCII" is "OEM" */
-# define ASCII2ISO(c) (((c) & 0x80) ? oem2iso[(c) & 0x7f] : (c))
+# define ASCII2ISO(c) (((c) & 0x80) ? \
+ ((uO.iso8859_2 == FALSE) ? oem2iso[(c) & 0x7f] : oem2iso_2[(c) & 0x7f]) : \
+ (c))
# define ASCII2ISO(c) \
((((c) & 0x80) && oem2iso) ? oem2iso[(c) & 0x7f] : (c))
+ (( ((c) & 0x80) ? ((uO.iso8859_2 == FALSE) ? (oem2iso ? oem2iso[(c) & 0x7f] : (c)) : oem2iso_2[(c) & 0x7f]) : (c))
# if (defined(NEED_STR2ISO) && !defined(CRYP_USES_OEM2ISO))
# define CRYP_USES_OEM2ISO
# endif
@@ -2513,7 +2529,9 @@
@@ -2957,8 +2972,9 @@ char *GetLoadPath OF((__GPRO));
# define ASCII2OEM(c) (c)
# else
/* assume: "ASCII" is "ISO-ANSI" */
-# define ASCII2OEM(c) (((c) & 0x80) ? iso2oem[(c) & 0x7f] : (c))
-# define ASCII2OEM(c) \
- ((((c) & 0x80) && iso2oem) ? iso2oem[(c) & 0x7f] : (c))
+# define ASCII2OEM(c) (((c) & 0x80) ? \
+ ((uO.iso8859_2 == FALSE) ? iso2oem[(c) & 0x7f] : iso2oem_2[(c) & 0x7f]) : \
+ ((uO.iso8859_2 == FALSE) ? (iso2oem ? iso2oem[(c) & 0x7f] : (c)) : iso2oem_2[(c) & 0x7f]) : \
+ (c))
# if (defined(NEED_STR2OEM) && !defined(CRYP_USES_ISO2OEM))
# define CRYP_USES_ISO2OEM
# endif
@@ -2584,9 +2602,11 @@
@@ -3029,10 +3045,12 @@ char *GetLoadPath OF((__GPRO));
#endif
#ifdef IZ_ISO2OEM_ARRAY
extern ZCONST uch Far iso2oem[];
extern ZCONST uch Far *iso2oem;
+ extern ZCONST uch Far iso2oem_2[];
extern ZCONST uch Far iso2oem_850[];
#endif
#ifdef IZ_OEM2ISO_ARRAY
extern ZCONST uch Far oem2iso[];
extern ZCONST uch Far *oem2iso;
+ extern ZCONST uch Far oem2iso_2[];
extern ZCONST uch Far oem2iso_850[];
#endif
extern ZCONST char Far VersionDate[];

View File

@ -1,267 +0,0 @@
--- extract.c 2005-02-26 05:47:30.000000000 +0100
+++ extract.c 2007-12-03 13:49:01.000000000 +0100
@@ -308,7 +308,7 @@ int extract_or_test_files(__G) /* ret
int reached_end, no_endsig_found;
int error, error_in_archive=PK_COOL;
int *fn_matched=NULL, *xn_matched=NULL;
- unsigned members_processed;
+ Z_OFF_T members_processed;
ulg num_skipped=0L, num_bad_pwd=0L;
Z_OFF_T old_extra_bytes = 0L;
#ifdef SET_DIR_ATTRIB
@@ -541,7 +541,7 @@ int extract_or_test_files(__G) /* ret
G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd);
#else /* !USE_STRM_INPUT */
G.cur_zipfile_bufstart =
- lseek(G.zipfd, cd_bufstart, SEEK_SET);
+ lseek64(G.zipfd,(Z_OFF_T)cd_bufstart, SEEK_SET);
#endif /* ?USE_STRM_INPUT */
read(G.zipfd, (char *)G.inbuf, INBUFSIZ); /* been here before... */
G.inptr = cd_inptr;
@@ -942,7 +942,8 @@ static int extract_or_test_entrylist(__G
Trace((stderr,
"debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n",
(long)bufstart, (long)G.cur_zipfile_bufstart));
- if (request < 0) {
+ if ((request < 0) || (request > MAX_ZIP_SIZE)) { /* >2^32-8193 */
+ printf("retry - request = 0x%lu\n", (ulg)request);
Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg),
G.zipfn, LoadFarString(ReportMsg)));
error_in_archive = PK_ERR;
@@ -982,7 +983,7 @@ static int extract_or_test_entrylist(__G
G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd);
#else /* !USE_STRM_INPUT */
G.cur_zipfile_bufstart =
- lseek(G.zipfd, bufstart, SEEK_SET);
+ lseek64(G.zipfd, bufstart, SEEK_SET);
#endif /* ?USE_STRM_INPUT */
if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0)
{
--- fileio.c 2005-02-27 03:10:12.000000000 +0100
+++ fileio.c 2007-12-03 13:49:01.000000000 +0100
@@ -113,6 +113,9 @@ static int disk_error OF((__GPRO));
/* Strings used in fileio.c */
/****************************/
+static ZCONST char Far ZipFileTooBig[] =
+ "error: Zip file too big (greater than %lu bytes)\n";
+
static ZCONST char Far CannotOpenZipfile[] =
"error: cannot open zipfile [ %s ]\n %s\n";
@@ -183,6 +186,7 @@ static ZCONST char Far ExtraFieldTooLong
int open_input_file(__G) /* return 1 if open failed */
__GDEF
{
+ struct stat64 sb;
/*
* open the zipfile for reading and in BINARY mode to prevent cr/lf
* translation, which would corrupt the bitstreams
@@ -201,9 +205,9 @@ int open_input_file(__G) /* return 1
G.zipfd = fopen(G.zipfn, FOPR);
#else /* !USE_STRM_INPUT */
# ifdef O_BINARY
- G.zipfd = open(G.zipfn, O_RDONLY | O_BINARY);
+ G.zipfd = open(G.zipfn, O_RDONLY | O_BINARY | O_LARGEFILE);
# else
- G.zipfd = open(G.zipfn, O_RDONLY);
+ G.zipfd = open(G.zipfn, O_RDONLY | O_LARGEFILE);
# endif
#endif /* ?USE_STRM_INPUT */
#endif /* ?CMS_MVS */
@@ -221,6 +225,12 @@ int open_input_file(__G) /* return 1
G.zipfn, strerror(errno)));
return 1;
}
+ fstat64(G.zipfd, &sb);
+ if (sb.st_size > MAX_ZIP_SIZE) {
+ Info(slide, 0x401, ((char *)slide,
+ LoadFarString(ZipFileTooBig),
+ ((ulg)MAX_ZIP_SIZE)));
+ }
return 0;
} /* end function open_input_file() */
@@ -238,6 +248,7 @@ int open_input_file(__G) /* return 1
int open_outfile(__G) /* return 1 if fail */
__GDEF
{
+ int fd;
#ifdef DLL
if (G.redirect_data)
return (redirect_outfile(__G) == FALSE);
@@ -259,7 +270,7 @@ int open_outfile(__G) /* return
}
#endif /* BORLAND_STAT_BUG */
#ifdef SYMLINKS
- if (SSTAT(G.filename, &G.statbuf) == 0 || lstat(G.filename,&G.statbuf) == 0)
+ if (SSTAT(G.filename, &G.statbuf) == 0 || lstat64(G.filename,&G.statbuf) == 0)
#else
if (SSTAT(G.filename, &G.statbuf) == 0)
#endif /* ?SYMLINKS */
@@ -413,7 +424,9 @@ int open_outfile(__G) /* return
#endif /* NOVELL_BUG_FAILSAFE */
Trace((stderr, "open_outfile: doing fopen(%s) for writing\n",
FnFilter1(G.filename)));
- if ((G.outfile = fopen(G.filename, FOPW)) == (FILE *)NULL) {
+
+ fd = open(G.filename, O_WRONLY | O_LARGEFILE | O_CREAT);
+ if ((G.outfile = fdopen(fd, FOPW)) == (FILE *)NULL) {
Info(slide, 0x401, ((char *)slide, LoadFarString(CannotCreateFile),
FnFilter1(G.filename)));
return 1;
@@ -682,7 +695,7 @@ int seek_zipf(__G__ abs_offset)
Z_OFF_T inbuf_offset = request % INBUFSIZ;
Z_OFF_T bufstart = request - inbuf_offset;
- if (request < 0) {
+ if (request < 0) {
Info(slide, 1, ((char *)slide, LoadFarStringSmall(SeekMsg),
G.zipfn, LoadFarString(ReportMsg)));
return(PK_BADERR);
@@ -694,7 +707,7 @@ int seek_zipf(__G__ abs_offset)
fseek(G.zipfd, bufstart, SEEK_SET);
G.cur_zipfile_bufstart = ftell(G.zipfd);
#else /* !USE_STRM_INPUT */
- G.cur_zipfile_bufstart = lseek(G.zipfd, bufstart, SEEK_SET);
+ G.cur_zipfile_bufstart = lseek64(G.zipfd, bufstart, SEEK_SET);
#endif /* ?USE_STRM_INPUT */
Trace((stderr,
" request = %ld, (abs+extra) = %ld, inbuf_offset = %ld\n",
@@ -1850,7 +1863,7 @@ int check_for_newer(__G__ filename) /*
Trace((stderr, "check_for_newer: doing lstat(%s)\n",
FnFilter1(filename)));
/* GRR OPTION: could instead do this test ONLY if G.symlnk is true */
- if (lstat(filename, &G.statbuf) == 0) {
+ if (lstat64(filename, &G.statbuf) == 0) {
Trace((stderr,
"check_for_newer: lstat(%s) returns 0: symlink does exist\n",
FnFilter1(filename)));
@@ -1867,7 +1880,7 @@ int check_for_newer(__G__ filename) /*
#ifdef SYMLINKS
/* GRR OPTION: could instead do this test ONLY if G.symlnk is true */
- if (lstat(filename, &G.statbuf) == 0 && S_ISLNK(G.statbuf.st_mode)) {
+ if (lstat64(filename, &G.statbuf) == 0 && S_ISLNK(G.statbuf.st_mode)) {
Trace((stderr, "check_for_newer: %s is a symbolic link\n",
FnFilter1(filename)));
if (QCOND2 && !IS_OVERWRT_ALL)
--- globals.h 2004-11-22 01:42:00.000000000 +0100
+++ globals.h 2007-12-03 13:49:01.000000000 +0100
@@ -256,7 +256,12 @@ typedef struct Globals {
local_file_hdr lrec; /* used in unzip.c, extract.c */
cdir_file_hdr crec; /* used in unzip.c, extract.c, misc.c */
ecdir_rec ecrec; /* used in unzip.c, extract.c */
- struct stat statbuf; /* used by main, mapname, check_for_newer */
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 statbuf; /* used by main, mapname, check_for_newer */
+#else
+ struct stat statbuf; /* used by main, mapname, check_for_newer */
+#endif
+
int mem_mode;
uch *outbufptr; /* extract.c static */
--- list.c 2005-01-27 02:02:02.000000000 +0100
+++ list.c 2007-12-03 13:55:10.000000000 +0100
@@ -62,12 +62,12 @@
"%8lu %-7s%8lu %4s %02u%c%02u%c%02u %02u:%02u %08lx %c";
static ZCONST char Far LongFileTrailer[] =
"-------- ------- --- \
- -------\n%8lu %8lu %4s %lu file%s\n";
+ -------\n%8ju %8ju %4s %lu file%s\n";
#ifdef OS2_EAS
static ZCONST char Far ShortHdrStats[] =
"%9lu %6lu %6lu %02u%c%02u%c%02u %02u:%02u %c";
static ZCONST char Far ShortFileTrailer[] = " -------- ----- ----- \
- -------\n%9lu %6lu %6lu %lu file%s\n";
+ -------\n%9ju %6lu %6lu %lu file%s\n";
static ZCONST char Far OS2ExtAttrTrailer[] =
"%lu file%s %lu bytes of OS/2 extended attributes attached.\n";
static ZCONST char Far OS2ACLTrailer[] =
@@ -76,7 +76,7 @@
static ZCONST char Far ShortHdrStats[] =
"%9lu %02u%c%02u%c%02u %02u:%02u %c";
static ZCONST char Far ShortFileTrailer[] = " -------- \
- -------\n%9lu %lu file%s\n";
+ -------\n%9ju %lu file%s\n";
#endif /* ?OS2_EAS */
#endif /* !WINDLL */
@@ -105,7 +105,8 @@ int list_files(__G) /* return PK-type
struct tm *t;
#endif
unsigned yr, mo, dy, hh, mm;
- ulg csiz, tot_csize=0L, tot_ucsize=0L;
+ ulg csiz;
+ unsigned long long tot_csize=0, tot_ucsize=0;
#ifdef OS2_EAS
ulg ea_size, tot_easize=0L, tot_eafiles=0L;
ulg acl_size, tot_aclsize=0L, tot_aclfiles=0L;
--- process.c 2007-12-03 13:44:30.000000000 +0100
+++ process.c 2007-12-03 13:49:01.000000000 +0100
@@ -934,8 +934,8 @@ static int find_ecrec(__G__ searchlen)
Treat case of short zipfile separately.
---------------------------------------------------------------------------*/
- if (G.ziplen <= INBUFSIZ) {
- lseek(G.zipfd, 0L, SEEK_SET);
+ if ((unsigned long)G.ziplen <= (unsigned long)INBUFSIZ) {
+ lseek64(G.zipfd, 0L, SEEK_SET);
if ((G.incnt = read(G.zipfd,(char *)G.inbuf,(unsigned int)G.ziplen))
== (int)G.ziplen)
@@ -962,7 +962,7 @@ static int find_ecrec(__G__ searchlen)
fseek((FILE *)G.zipfd, G.ziplen-tail_len, SEEK_SET);
G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd);
#else /* !USE_STRM_INPUT */
- G.cur_zipfile_bufstart = lseek(G.zipfd, G.ziplen-tail_len,
+ G.cur_zipfile_bufstart = lseek64(G.zipfd, G.ziplen-tail_len,
SEEK_SET);
#endif /* ?USE_STRM_INPUT */
if ((G.incnt = read(G.zipfd, (char *)G.inbuf,
@@ -996,7 +996,7 @@ static int find_ecrec(__G__ searchlen)
for (i = 1; !found && (i <= numblks); ++i) {
G.cur_zipfile_bufstart -= INBUFSIZ;
- lseek(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET);
+ lseek64(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET);
if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ))
!= INBUFSIZ)
break; /* fall through and fail */
--- unix/Makefile 2007-12-03 13:44:30.000000000 +0100
+++ unix/Makefile 2007-12-03 13:54:38.000000000 +0100
@@ -783,7 +783,7 @@ linux_asm: linux
# Linux (Posix, approximately SysV): virtually any version since before 0.96,
# for any platform. Change "-O" to "-O3" or whatever, as desired...
linux_noasm: unix_make
- $(MAKE) unzips CC=gcc LD=gcc CF="$(RPM_OPT_FLAGS) -I. $(LOC)"
+ $(MAKE) unzips CC=gcc LD=gcc CF="$(RPM_OPT_FLAGS) -D_LARGEFILE64_SOURCE -I. $(LOC)"
# Linux with lcc compiler: __inline__ (stat.h) not recognized, and must edit
# /usr/include/gnu/types.h to get rid of "long long" if __LCC__ defined. -O3
--- unzip.h 2007-12-03 13:44:30.000000000 +0100
+++ unzip.h 2007-12-03 13:49:01.000000000 +0100
@@ -606,6 +606,8 @@ typedef struct central_directory_file_he
#define UZ_ST_CONTINUE 0
#define UZ_ST_BREAK 1
+#define MAX_ZIP_SIZE 0xffffdffe
+
/*---------------------------------------------------------------------------
Prototypes for public UnZip API (DLL) functions.
--- unzpriv.h 2007-12-03 13:44:30.000000000 +0100
+++ unzpriv.h 2007-12-03 13:49:01.000000000 +0100
@@ -785,9 +785,9 @@
#endif
#ifndef SSTAT
# ifdef WILD_STAT_BUG
-# define SSTAT(path,pbuf) (iswild(path) || stat(path,pbuf))
+# define SSTAT(path,pbuf) (iswild(path) || stat64(path,pbuf))
# else
-# define SSTAT stat
+# define SSTAT stat64
# endif
#endif
#ifndef STRNICMP

View File

@ -1,6 +1,8 @@
--- man/zipinfo.1-dist 2007-04-25 12:18:27.000000000 +0200
+++ man/zipinfo.1 2007-04-25 12:19:43.000000000 +0200
@@ -114,7 +114,10 @@
Index: man/zipinfo.1
===================================================================
--- man/zipinfo.1.orig 2010-05-21 14:23:25.824590928 +0200
+++ man/zipinfo.1 2010-05-21 14:24:41.631590822 +0200
@@ -114,7 +114,10 @@ useful in cases where the stored filenam
.TP
.B \-s
list zipfile info in short Unix ``\fCls \-l\fR'' format. This is the default
@ -12,32 +14,24 @@
.TP
.B \-m
list zipfile info in medium Unix ``\fCls \-l\fR'' format. Identical to the
--- man/unzip.1-dist 2007-04-25 12:04:20.000000000 +0200
+++ man/unzip.1 2007-04-25 12:19:54.000000000 +0200
Index: man/unzip.1
===================================================================
--- man/unzip.1.orig 2010-05-21 14:23:25.824590928 +0200
+++ man/unzip.1 2010-05-21 14:24:41.635590912 +0200
@@ -25,7 +25,7 @@
unzip \- list, test and extract compressed files in a ZIP archive
.PD
.SH SYNOPSIS
-\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCKLMOVX$/:\fP]]
+\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCKLMOSVX$/:\fP]]
-\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCDKLMOUVWX$/:^\fP]]
+\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCDKLMOSUVWX$/:^\fP]]
\fIfile\fP[\fI.zip\fP] [\fIfile(s)\fP\ .\|.\|.]
[\fB\-x\fP\ \fIxfile(s)\fP\ .\|.\|.] [\fB\-d\fP\ \fIexdir\fP]
.PD
@@ -371,6 +371,11 @@
spaces in filenames. Conversion of spaces to underscores can eliminate the
awkwardness in some cases.
.TP
+.B \-S
+suppress the conversion of file name encodings. This is useful when an
+archive contains file names with non-latin letters. You have to convert
+the file names appropriately to your native encoding manually afterwards.
+.TP
.B \-U
(obsolete; to be removed in a future release) leave filenames uppercase if
created under MS-DOS, VMS, etc. See \fB\-L\fP above.
--- unzpriv.h-dist 2007-04-25 11:55:59.000000000 +0200
+++ unzpriv.h 2007-04-25 12:12:22.000000000 +0200
@@ -2577,6 +2577,7 @@ char *GetLoadPath OF((__GPRO));
Index: unzpriv.h
===================================================================
--- unzpriv.h.orig 2010-05-21 14:24:02.641090783 +0200
+++ unzpriv.h 2010-05-21 14:24:55.632590821 +0200
@@ -3020,6 +3020,7 @@ char *GetLoadPath OF((__GPRO));
*/
#ifndef Ext_ASCII_TO_Native
# define Ext_ASCII_TO_Native(string, hostnum, hostver, isuxatt, islochdr) \
@ -45,7 +39,7 @@
if (((hostnum) == FS_FAT_ && \
!(((islochdr) || (isuxatt)) && \
((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \
@@ -2585,7 +2586,7 @@ char *GetLoadPath OF((__GPRO));
@@ -3028,7 +3029,7 @@ char *GetLoadPath OF((__GPRO));
_OEM_INTERN((string)); \
} else { \
_ISO_INTERN((string)); \
@ -54,9 +48,11 @@
#endif
--- zipinfo.c-dist 2007-04-25 12:17:17.000000000 +0200
+++ zipinfo.c 2007-04-25 12:18:09.000000000 +0200
@@ -517,6 +517,12 @@ int zi_opts(__G__ pargc, pargv)
Index: zipinfo.c
===================================================================
--- zipinfo.c.orig 2010-05-21 14:23:25.824590928 +0200
+++ zipinfo.c 2010-05-21 14:24:41.695590831 +0200
@@ -527,6 +527,12 @@ int zi_opts(__G__ pargc, pargv)
else
uO.lflag = 3;
break;
@ -69,24 +65,29 @@
case 't': /* totals line */
if (negative)
tflag_2v = tflag_slm = FALSE, negative = 0;
--- unzip.c-dist 2007-04-25 11:58:44.000000000 +0200
+++ unzip.c 2007-04-25 12:12:35.000000000 +0200
@@ -1416,6 +1416,12 @@ int uz_opts(__G__ pargc, pargv)
uO.sflag = TRUE;
Index: unzip.c
===================================================================
--- unzip.c.orig 2010-05-21 14:23:25.824590928 +0200
+++ unzip.c 2010-05-21 14:24:41.727590745 +0200
@@ -1689,6 +1689,13 @@ int uz_opts(__G__ pargc, pargv)
else
uO.S_flag = TRUE;
break;
#endif /* DOS_FLX_NLM_OS2_W32 */
+ case ('S'): /* suppress file name encoding conversions */
+#else
+ case ('S'): /* suppress file name encoding conversions */
+ if (negative)
+ uO.no_conv_enc = FALSE, negative = 0;
+ else
+ uO.no_conv_enc = TRUE;
+ break;
#endif /* VMS */
case ('t'):
if (negative)
uO.tflag = FALSE, negative = 0;
--- unzip.h-dist 2007-04-25 11:59:03.000000000 +0200
+++ unzip.h 2007-04-25 12:12:11.000000000 +0200
@@ -478,6 +478,7 @@ typedef struct _UzpOpts {
Index: unzip.h
===================================================================
--- unzip.h.orig 2010-05-21 14:23:25.824590928 +0200
+++ unzip.h 2010-05-21 14:24:41.731591035 +0200
@@ -518,6 +518,7 @@ typedef struct _UzpOpts {
#if (defined(MSDOS) || defined(FLEXOS) || defined(OS2) || defined(WIN32))
int sflag; /* -s: convert spaces in filenames to underscores */
#endif

View File

@ -1,13 +1,43 @@
--- fileio.c
+++ fileio.c
@@ -425,7 +425,9 @@
Trace((stderr, "open_outfile: doing fopen(%s) for writing\n",
FnFilter1(G.filename)));
- fd = open(G.filename, O_WRONLY | O_LARGEFILE | O_CREAT);
+ fd = open(G.filename, O_WRONLY | O_LARGEFILE | O_CREAT,
Index: fileio.c
===================================================================
--- fileio.c.orig 2010-05-21 14:25:41.384590892 +0200
+++ fileio.c 2010-05-21 14:32:27.459889721 +0200
@@ -71,6 +71,11 @@
#include "crc32.h"
#include "crypt.h"
#include "ttyio.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+
/* setup of codepage conversion for decryption passwords */
#if CRYPT
@@ -270,6 +275,7 @@ int open_input_file(__G) /* return 1
int open_outfile(__G) /* return 1 if fail */
__GDEF
{
+ int fd;
#ifdef DLL
if (G.redirect_data)
return (redirect_outfile(__G) == FALSE);
@@ -454,13 +460,16 @@ int open_outfile(__G) /* retur
#if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM)
mode_t umask_sav = umask(0077);
#endif
+ fd = open(G.filename, O_WRONLY | O_LARGEFILE | O_CREAT,
+ /* 0644 in portable POSIX notation: */
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if ((G.outfile = fdopen(fd, FOPW)) == (FILE *)NULL) {
Info(slide, 0x401, ((char *)slide, LoadFarString(CannotCreateFile),
FnFilter1(G.filename)));
#if defined(SYMLINKS) || defined(QLZIP)
/* These features require the ability to re-read extracted data from
the output files. Output files are created with Read&Write access.
*/
- G.outfile = zfopen(G.filename, FOPWR);
+ G.outfile = zfdopen(fd, FOPWR);
#else
- G.outfile = zfopen(G.filename, FOPW);
+ G.outfile = zfdopen(fd, FOPW);
#endif
#if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM)
umask(umask_sav);

View File

@ -1,22 +1,22 @@
Index: unix/Makefile
===================================================================
--- unix/Makefile.orig 2010-05-10 17:45:59.892090727 +0200
+++ unix/Makefile 2010-05-10 17:46:18.636090912 +0200
@@ -773,7 +773,7 @@ isi: unix_make
--- unix/Makefile.orig 2010-05-21 13:11:26.128591070 +0200
+++ unix/Makefile 2010-05-21 13:14:45.429090869 +0200
@@ -809,7 +809,7 @@ isi: unix_make
linux: unix_make
@echo 'NOTE: use linux_noasm target for non-Intel Linux compiles.'
$(MAKE) unzips CC=gcc LD=gcc AS=gcc\
- CF="-O3 -Wall -I. -DASM_CRC $(LOC)"\
+ CF="$(RPM_OPT_FLAGS) -I. -DASM_CRC $(LOC)"\
AF="-Di386 $(AF)" CRC32=crc_gcc
- CFLAGS="-O3 -Wall -DASM_CRC"\
+ CFLAGS="$(RPM_OPT_FLAGS) -DASM_CRC"\
AF="-Di386 $(AF)" CRCA_O=crc_gcc$O
# GRR: this echo is pointless; if user gets this far, no difference to install
# @echo 'Be sure to use the install_asm target rather than the install target'
@@ -783,7 +783,7 @@ linux_asm: linux
@@ -819,7 +819,7 @@ linux_asm: linux
# Linux (Posix, approximately SysV): virtually any version since before 0.96,
# for any platform. Change "-O" to "-O3" or whatever, as desired...
linux_noasm: unix_make
- $(MAKE) unzips CC=gcc LD=gcc CF="-O -Wall -I. $(LOC)"
+ $(MAKE) unzips CC=gcc LD=gcc CF="$(RPM_OPT_FLAGS) -I. $(LOC)"
- $(MAKE) unzips CC=gcc LD=gcc CFLAGS="-O -Wall"
+ $(MAKE) unzips CC=gcc LD=gcc CF="$(RPM_OPT_FLAGS)"
# Linux with lcc compiler: __inline__ (stat.h) not recognized, and must edit
# /usr/include/gnu/types.h to get rid of "long long" if __LCC__ defined. -O3

View File

@ -1,3 +1,43 @@
-------------------------------------------------------------------
Fri May 21 16:39:24 CEST 2010 - pth@suse.de
- Update to 6.0:
* Support PKWARE ZIP64 extensions, allowing Zip archives and Zip archive
entries larger than 4 GiBytes and more than 65536 entries within a
single Zip archive. This support is currently only available for Unix,
OpenVMS and Win32/Win64.
* Support for bzip2 compression method.
* Support for UTF-8 encoded entry names, both through PKWARE's "General
Purpose Flags Bit 11" indicator and Info-ZIP's new "up" unicode path
extra field. (Currently, on Windows the UTF-8 handling is limited to
the character subset contained in the configured non-unicode "system
code page".)
* Fixed "Time of Creation/Time of Use" vulnerability when setting
attributes of extracted files, for Unix and Unix-like ports.
* Fixed memory leak when processing invalid deflated data.
* Fixed long-standing bug in unshrink (partial_clear), added boundary
checks against invalid compressed data.
* On Unix, keep inherited SGID attribute bit for extracted directories
unless restoration of owner/group id or SUID/SGID/Tacky attributes was
requested.
* On Unix, allow extracted filenames to contain embedded control
characters when explicitly requested by specifying the new command line
option "-^".
* On Unix, support restoration of symbolic link attributes.
* On Unix, support restoration of 32-bit UID/GID data using the new "ux"
IZUNIX3 extra field introduced with Zip 3.0.
* Support symbolic links zipped up on VMS.
* New -D option to suppress restoration of timestamps for extracted
directory entries (on those ports that support setting of directory
timestamps). By specifying "-DD", this new option also allows to
suppress timestamp restoration for ALL extracted files on all UnZip
ports which support restoration of timestamps. On VMS, the default
behaviour is now to skip restoration of directory timestamps; here,
"--D" restores ALL timestamps, "-D" restores none.
* On OS/2, Win32, and Unix, the (previously optional) feature UNIXBACKUP
to allow saving backup copies of overwritten files on extraction is now
enabled by default.
-------------------------------------------------------------------
Mon May 10 16:39:20 UTC 2010 - pth@suse.de

View File

@ -1,7 +1,8 @@
diff -Nur unzip-5.50.orig/unix/Makefile unzip-5.50/unix/Makefile
--- unzip-5.50.orig/unix/Makefile Sat Feb 16 18:00:38 2002
+++ unzip-5.50/unix/Makefile Mon Mar 11 08:40:41 2002
@@ -61,8 +61,8 @@
Index: unix/Makefile
===================================================================
--- unix/Makefile.orig 2009-01-18 23:41:18.000000000 +0100
+++ unix/Makefile 2010-05-21 14:06:56.192590841 +0200
@@ -64,8 +64,8 @@ FL2 = $(LF2)
# general-purpose stuff
#CP = cp
@ -12,7 +13,7 @@ diff -Nur unzip-5.50.orig/unix/Makefile unzip-5.50/unix/Makefile
RM = rm -f
CHMOD = chmod
BINPERMS = 755
@@ -102,7 +102,7 @@
@@ -121,7 +121,7 @@ INSTALL_PROGRAM = $(INSTALL)
INSTALL_D = mkdir -p
# on some systems, manext=l and MANDIR=/usr/man/man$(manext) may be appropriate
manext = 1

View File

@ -23,20 +23,18 @@ Group: Productivity/Archiving/Compression
Provides: crunzip
Obsoletes: crunzip
AutoReqProv: on
Version: 5.52
Release: 144
Version: 6.00
%define fileversion 60
Release: 1
Summary: A program to unpack compressed files
Source: unzip552.tar.bz2
Source: %{name}%{fileversion}.tar.bz2
Url: http://www.info-zip.org/
Patch: unzip.dif
Patch0: unzip.dif
Patch1: unzip-iso8859_2.patch
Patch3: unzip-optflags.patch
Patch4: unzip-5.52-filename_too_long.patch
Patch5: unzip-no_file_name_translation.patch
Patch6: unzip-near-4GB.patch
Patch7: unzip-CVE-2005-2475.patch
Patch8: unzip-open_missing_mode.patch
Patch9: unzip-5.5.2-goo-sec.patch
Patch10: unzip-5.52-use_librcc.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: librcc-devel
@ -55,20 +53,17 @@ Authors:
Info-ZIP <zip-bugs@lists.wku.edu>
%prep
%setup -q
%patch -p1
%patch1 -p1
%setup -q -n %{name}%{fileversion}
%patch0
%patch1
%patch3
%patch4
%patch5
%patch6
%patch7
%patch8
%patch9
%patch10
%build
export RPM_OPT_FLAGS="%optflags -DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fstack-protector"
export RPM_OPT_FLAGS="%optflags -DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -fstack-protector -I."
make %{?jobs:-j%jobs} -f unix/Makefile LF2=-lrcc linux_noasm
%install

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:67ac960892936d07286da931f66e02fdd472192cef3d48fd88ba0046c2ea04a4
size 864023

3
unzip60.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d8ce25f541563a112b077b4d61cfabee81d3d98b99c9ce60cf51266703dce9b2
size 1063255