From nobody@FreeBSD.org  Tue Dec 25 07:41:11 2001
Return-Path: <nobody@FreeBSD.org>
Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21])
	by hub.freebsd.org (Postfix) with ESMTP id 08C7537B41F
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 25 Dec 2001 07:41:11 -0800 (PST)
Received: (from nobody@localhost)
	by freefall.freebsd.org (8.11.6/8.11.6) id fBPFfBl42365;
	Tue, 25 Dec 2001 07:41:11 -0800 (PST)
	(envelope-from nobody)
Message-Id: <200112251541.fBPFfBl42365@freefall.freebsd.org>
Date: Tue, 25 Dec 2001 07:41:11 -0800 (PST)
From: Idar Tollefsen <idart@hotmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: zip -T [zip file] fails with message about missing end signature
X-Send-Pr-Version: www-1.0

>Number:         33170
>Category:       ports
>Synopsis:       zip -T [zip file] fails with message about missing end signature
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    ache
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Dec 25 07:50:00 PST 2001
>Closed-Date:    Fri May 31 03:18:19 PDT 2002
>Last-Modified:  Fri May 31 03:18:19 PDT 2002
>Originator:     Idar Tollefsen
>Release:        4.4-STABLE
>Organization:
Performance Design
>Environment:
FreeBSD blackbird.performancedesign.no 4.4-STABLE FreeBSD 4.4-STABLE #0: Fri Dec 14 22:02:02 CET 2001     idart@blackbird.performancedesign.no:/usr/obj/usr/src/sys/BLACKBIRD  alpha
>Description:
While building Mozilla wiht --enable-chrome-format=jar (the default),
the build would fail while testing the integrity of en-US.jar, which
is just a zip file.

Upon further investigation, it turned out that doing
zip test.zip anyfile
followed by
zip -T test.zip
always would yield an error about a missing end signature.

Here is the exact message:

zip warning: missing end signature--probably not a zip file (did you
zip warning: remember to use binary mode when you transferred it?)

zip error: Zip file structure invalid (test.zip)

This is done with zip-2.3 on a 21164A running 4.4-STABLE.
It has not been established wether this is spesific for the Alpha or
not, but I suspect it is since breaking the Mozilla build is something
that the i386 crowd would have screamed about a long time ago.
>How-To-Repeat:
Run the following (on an Alpha):
zip [name of zip file] [any file]
zip -T [name of zip file]

>Fix:
      
>Release-Note:
>Audit-Trail:

From: Alan Eldridge <alane@geeksrus.net>
To: Idar Tollefsen <idart@hotmail.com>
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end signature
Date: Tue, 25 Dec 2001 10:51:50 -0500

 On Tue, Dec 25, 2001 at 07:41:11AM -0800, Idar Tollefsen wrote:
 >It has not been established wether this is spesific for the Alpha or
 >not, but I suspect it is since breaking the Mozilla build is something
 >that the i386 crowd would have screamed about a long time ago.
 
 Ooh, look ... another big-endian vs little-endian problem, I'd guess.
 
 -- 
 Alan Eldridge
 

From: "Idar Tollefsen" <idart@hotmail.com>
To: alane@geeksrus.net
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end
 signature
Date: Wed, 26 Dec 2001 00:16:48 +0100

 >>It has not been established wether this is spesific for the Alpha
 >>or not, but I suspect it is since breaking the Mozilla build is
 >>something that the i386 crowd would have screamed about a long
 >>time ago.
 
 >Ooh, look ... another big-endian vs little-endian problem,
 >I'd guess.
 
 Altough not my strong side, I tought both Intel processors and
 Alphas where little-endian.
 
 Anyway, I ment no offence to anyone running i386, which indeed
 would be the majority of FreeBSD users. I simply ment that since
 there are more i386 users, they would most likely have caught the
 problem a long time ago. Minor platforms, as I suppose the Alpha is,
 could have these problems laying around for a long periode of time
 before anyone discovers them simply because there are fewer people
 using this platform.
 
 I felt the need to clearify this as you seemed to take offence
 to the way my message was formulated.
 
 
 _________________________________________________________________
 Chat with friends online, try MSN Messenger: http://messenger.msn.com
 

From: Alan Eldridge <alane@geeksrus.net>
To: Idar Tollefsen <idart@hotmail.com>
Cc: freebsd-ports@FreeBSD.ORG, freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end signature
Date: Tue, 25 Dec 2001 18:56:07 -0500

 Hmm, it's not even zip. All that zip -T does is invoke "unzip -t".
 So we need to look at a different program entirely. I'll see if I can
 come up with any ideas.
 
 -- 
 Alan Eldridge
 Pmmfmffmmfmp mmmpppppffmpmfpmpppff $PffMmmPppMpmPpfPpm mfpmmmmmfpmpmpppff.

From: Alan E <alane@geeksrus.net>
To: freebsd-gnats-submit@FreeBSD.org, idart@hotmail.com
Cc:  
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end signature
Date: Tue, 25 Dec 2001 19:34:43 -0500

 What does i386 zip/unzip say about the file zipped on the Alpha? What does 
 the Alpha say about a file zipped on i386? IOW, I'm wondering whether zip is 
 writing a bad file.... It is looking for the the sequence "PK\x05\x06" and is 
 doing so by converting bytes in the file to a long int and comparing against 
 0x06054b50 (little endian).
 
 Can you mail me or post a small zip file that it fails upon?
 
 -- 
 Alan Eldridge <ports@geeksrus.net>
 Pmmfmffmmfmp mmmpppppffmpmfpmpppff $PffMmmPppMpmPpfPpm mfpmmmmmfpmpmpppff.

From: "Idar Tollefsen" <idart@hotmail.com>
To: alane@geeksrus.net, freebsd-gnats-submit@FreeBSD.org
Cc:  
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end
 signature
Date: Wed, 26 Dec 2001 16:10:22 +0100

 This is a multi-part message in MIME format.
 
 ------=_NextPart_000_c8e_267b_16d1
 Content-Type: text/plain; format=flowed
 
 >What does i386 zip/unzip say about the file zipped on the Alpha?
 >What does the Alpha say about a file zipped on i386? IOW, I'm
 >wondering whether zip is writing a bad file.... It is looking for
 >the the sequence "PK\x05\x06" and is doing so by converting bytes
 >in the file to a long int and comparing against 0x06054b50
 >(little endian).
 
 I don't have access to FreeBSD, or any other Unix system, running
 on i386.
 
 Just to clarify one thing: Only testing the integrity of the zip
 file fails, zipping and unzipping works just fine anyway.
 
 I tested a zip file zipped on the Alpha with WinZip 8.0 on Windows
 2000. It worked just fine, no errors. I then zipped a file with
 WinZip and testet it on the Alpha. zip -T again complained about
 missing end singature, but it unzipped just fine anyway, as usual.
 
 I stumbled upon another thing as well: I forgot to type the name
 of the zip file once and the same message poped up. That is,
 instead of doing
 zip [name of zip file] [file to zip]
 I did
 zip [file to zip]
 and it complained about a missing end signature.
 
 >Can you mail me or post a small zip file that it fails upon?
 
 A small zip file zipped on the Alpha which fails the test is
 attached.
 
 And yes, I think it would be a good idea to test this on another
 Alpha, even tough it's not running FreeBSD. It could tell us if
 this is Alpha spesific or not, independent of OS.
 
 
 - IT
 
 
 _________________________________________________________________
 Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp.
 
 ------=_NextPart_000_c8e_267b_16d1
 Content-Type: application/x-zip-compressed; name="ITCVEN.zip"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="ITCVEN.zip"
 
 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
 AEUAAABeBgAAAAA=
 
 
 ------=_NextPart_000_c8e_267b_16d1--

From: "Vadim Mikhailov" <mvp@braz.ru>
To: <freebsd-gnats-submit@FreeBSD.org>, <idart@hotmail.com>
Cc:  
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end signature
Date: Tue, 19 Feb 2002 20:34:38 -0800

   I have run into the same problem on FreeBSD/alpha system.
 Apparently, I have figured out what's going on. It has nothing to do
 with 64-bit alignment or endianness. It's all about long-standing bug
 in FreeBSD - http://www.freebsd.org/cgi/query-pr.cgi?pr=kern%2F6184
 
 Let's take a look at infozip source, file zipfile.c around line 669:
 ...
     if (fseek(f, -4096L, SEEK_END) == 0) {
       zipbeg = (ulg) (ftell(f) + 4096L);
       while (!found && zipbeg >= 4096) {
         zipbeg -= 4096L;
         buf[4096] = t[1];
         buf[4097] = t[2];
         buf[4098] = t[3];
 /*
  * XXX error check ??
  */
         fread(buf, 1, 4096, f);
         fseek(f, -8192L, SEEK_CUR);
         t = &buf[4095];
 ...
 
   "f" in this context file handle of archive to be processed.
 If size of that archive is less than 4096 that means first
 fseek(f, -4096, SEEK_END) would try to seek to negative
 file offset. I found out that in this case fseek does not
 return an error and ftell(f) yields negative result!
 Of course, this does not make any sense.
   If archive size is between 4096 and 8192 bytes it would mean
 that second fseek(f, -8192, SEEK_CUR) also could try to do
 negative seek.
   Later this code tries to fseek(f, 0, SEEK_SET) but it does not
 help much - errno would be 27 (file too big) and everything blows up.
 I think that fseek should return an error (-1) to negative offset.
 I have checked what happens on other platforms. On FreeBSD/i386
 negative fseek succeeds, but later fseek(f, 0, SEEK_SET) does not
 give any errors - i.e. this negative fseek works without being caught.
 On linux negative fseek returns an error.
   Proper fix for this situation would be apply fix mentioned
 in kern/6184 to kernel. But I also wrote patch for infozip
 to avoid even trying negative seeks, so it works without
 kernel patching:
 
 ===========================================
 --- zipfile.c.orig Sun Nov  7 02:30:11 1999
 +++ zipfile.c Tue Feb 19 19:41:10 2002
 @@ -628,6 +628,16 @@
 
  #endif /* !UTIL */
 
 +local long fsize(FILE *f) {
 +    long size, curpos;
 +    if(!f) return 0;
 +    curpos = ftell(f);
 +    fseek(f, 0, SEEK_END);
 +    size = ftell(f);
 +    fseek(f, curpos, SEEK_SET);
 +    return size;
 +}
 +
  /*
   * scanzipf_reg starts searching for the End Signature at the end of the
 file
   * The End Signature points to the Central Directory Signature which points
 @@ -667,7 +677,7 @@
      t[1] = '\0';
      t[2] = '\0';
      t[3] = '\0';
 -    if (fseek(f, -4096L, SEEK_END) == 0) {
 +    if (fsize(f)>=4096L && fseek(f, -4096L, SEEK_END) == 0) {
        zipbeg = (ulg) (ftell(f) + 4096L);
        while (!found && zipbeg >= 4096) {
          zipbeg -= 4096L;
 @@ -678,7 +688,7 @@
   * XXX error check ??
   */
          fread(buf, 1, 4096, f);
 -        fseek(f, -8192L, SEEK_CUR);
 +        if(ftell(f)>=8192L) fseek(f, -8192L, SEEK_CUR);
          t = &buf[4095];
  /*
   * XXX far pointer arithmetic in DOS
 ===========================================
 
   It would be great if someone could commit this patch to ports tree
 as /usr/ports/archivers/zip/files/patch-negativeseek or something.
 I have checked that with this patch zip works fine for both i386 and alpha.
   In the meantime if someone could commit fix proposed in kern/6184
 it won't hurt as well.
 
 Vadim Mikhailov
 
 
 

From: =?koi8-r?B?4c7E0sXKIP7F0s7P1w==?= <ache@nagual.pp.ru>
To: Vadim Mikhailov <mvp@braz.ru>, freebsd-gnats-submit@FreeBSD.org,
	idart@hotmail.com
Cc: freebsd-ports@FreeBSD.org
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end signature
Date: Wed, 20 Feb 2002 16:32:34 +0300

 On Tue, Feb 19, 2002 at 20:40:02 -0800, Vadim Mikhailov wrote:
 >  
 >  +local long fsize(FILE *f) {
 >  +    long size, curpos;
 >  +    if(!f) return 0;
 >  +    curpos = ftell(f);
 >  +    fseek(f, 0, SEEK_END);
 >  +    size = ftell(f);
 >  +    fseek(f, curpos, SEEK_SET);
 >  +    return size;
 >  +}
 
 You already have file "f" opened at this point, so fsize() can be more
 effectively implemented via fstat().
 
 >    In the meantime if someone could commit fix proposed in kern/6184
 >  it won't hurt as well.
 
 FYI, negative lseek() and fseek() already disabled in FreeBSD-current
 
 -- 
 Andrey A. Chernov
 http://ache.pp.ru/
Responsible-Changed-From-To: freebsd-ports->ache 
Responsible-Changed-By: petef 
Responsible-Changed-When: Wed Feb 20 17:55:44 PST 2002 
Responsible-Changed-Why:  
Over to maintainer 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=33170 

From: "Vadim Mikhailov" <mvp@braz.ru>
To: <freebsd-gnats-submit@FreeBSD.org>,
	"Andrey Chernov" <ache@FreeBSD.org>
Cc: "Kris Kennaway" <kris@obsecurity.org>,
	"Andrew Gallatin" <gallatin@cs.duke.edu>,
	"Dexter Coffin" <idnopheq@comcast.net>,
	"Joe Clarke" <marcus@marcuscom.com>
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end signature
Date: Thu, 30 May 2002 11:13:12 -0700

 Hi, All!
 
   Negative seek kernel bug kern/6184 still has not been fixed
 in -stable and probably it would not be fixed in 4.6-RELEASE.
 That means the only way to have working zip (and mozilla,
 which depend on working zip) on alpha in 4.6-R is to apply
 my patch to zip port. Fact that zip works in -current
 without patching is no excuse.
   To make zip work properly copy attached patch to
 /usr/ports/archivers/zip/files/ and reinstall zip port.
 I have checked it works fine on alpha and i386.
 Andrey, I have streamlined fsize() function to use fstat()
 according to your last comment. If you will commit this patch
 probably you need to bump PORTREVISION.
   See this bug history here:
 http://www.freebsd.org/cgi/query-pr.cgi?pr=33170
 
 Take care,
 
 Vadim Mikhailov.
 
 
 begin 666 patch-negativeseek.dat
 M+2TM('II<&9I;&4N8RYO<FEG"5-U;B!.;W8@(#<@,3@Z,S Z,3$@,3DY.0HK
 M*RL@>FEP9FEL92YC"49R:2!-87D@,S$@,#(Z,3 Z,#@@,C P,@I 0" M-C(X
 M+#8@*S8R."PQ,R! 0 H@"B C96YD:68@+RH@(55424P@*B\*( HK;&]C86P@
 M;V9F7W0@9G-I>F4H1DE,12 J9BD@>PHK(" @('-T<G5C="!S=&%T(',["BL@
 M(" @:68H(68I(')E='5R;B P.PHK(" @(&9S=&%T*&9I;&5N;RAF*2P@)G,I
 M.PHK(" @(')E='5R;B!S+G-T7W-I>F4["BM]"BL*("\J"B @*B!S8V%N>FEP
 M9E]R96<@<W1A<G1S('-E87)C:&EN9R!F;W(@=&AE($5N9"!3:6=N871U<F4@
 M870@=&AE(&5N9"!O9B!T:&4@9FEL90H@("H@5&AE($5N9"!3:6=N871U<F4@
 M<&]I;G1S('1O('1H92!#96YT<F%L($1I<F5C=&]R>2!3:6=N871U<F4@=VAI
 M8V@@<&]I;G1S"D! ("TV-C<L-R K-C<T+#<@0$ *(" @("!T6S%=(#T@)UPP
 M)SL*(" @("!T6S)=(#T@)UPP)SL*(" @("!T6S-=(#T@)UPP)SL*+2 @("!I
 M9B H9G-E96LH9BP@+30P.39,+"!3145+7T5.1"D@/3T@,"D@>PHK(" @(&EF
 M("AF<VEZ92AF*3X]-# Y-DP@)B8@9G-E96LH9BP@+30P.39,+"!3145+7T5.
 M1"D@/3T@,"D@>PH@(" @(" @>FEP8F5G(#T@*'5L9RD@*&9T96QL*&8I("L@
 M-# Y-DPI.PH@(" @(" @=VAI;&4@*"%F;W5N9" F)B!Z:7!B96<@/CT@-# Y
 M-BD@>PH@(" @(" @("!Z:7!B96<@+3T@-# Y-DP["D! ("TV-S@L-R K-C@U
 M+#<@0$ *(" J(%A86"!E<G)O<B!C:&5C:R _/PH@("HO"B @(" @(" @(&9R
 M96%D*&)U9BP@,2P@-# Y-BP@9BD["BT@(" @(" @(&9S965K*&8L("TX,3DR
 M3"P@4T5%2U]#55(I.PHK(" @(" @("!I9BAF=&5L;"AF*3X].#$Y,DPI(&9S
 M965K*&8L("TX,3DR3"P@4T5%2U]#55(I.PH@(" @(" @("!T(#T@)F)U9ELT
 M,#DU73L*("\J"B @*B!86%@@9F%R('!O:6YT97(@87)I=&AM971I8R!I;B!$
 #3U,*
 `
 end
 

From: "Andrey A. Chernov" <ache@nagual.pp.ru>
To: freebsd-gnats-submit@FreeBSD.org, idart@hotmail.com
Cc:  
Subject: Re: ports/33170: zip -T [zip file] fails with message about missing end signature
Date: Fri, 31 May 2002 12:42:19 +0400

 1) This patch is not needed for FreeBSD-current, so all additional
 code must be properly ifdef'ed with __FreeBSD_version check.
 
 2) Return code of fstat() is not checked, but must be.
 
 -- 
 Andrey A. Chernov
 http://ache.pp.ru/
 
State-Changed-From-To: open->closed 
State-Changed-By: ache 
State-Changed-When: Fri May 31 03:16:10 PDT 2002 
State-Changed-Why:  
Fixed 

http://www.freebsd.org/cgi/query-pr.cgi?pr=33170 
>Unformatted:
