From: "A.Appleyard"
To: DJGPP AT SUN DOT SOE DOT CLARKSON DOT EDU
Date: Wed, 25 Oct 1995 10:57:00 GMT
Subject: Re: An apparent fault in GZIP
"A.Appleyard" wrote (Subject: An apparent
fault in GZIP):-
> ... Here follows a program that I just wrote that successfully unzips a
> PKZIP file that contains one file, which must have been packed by shrinking
> ...
> #include
Sorry. A corrigendum. These lines:-
else if(c==2) {pc++;
for(m=256;m<0x10000;m++) b[a[m]]|=0x8000;
for(m=0;m<0x10000;m++)
if(b[m]&0x8000) b[m]&=0x7fff; else a[m]=b[m]=0;
for(q=257;b[q];q++) if(q>=0x10000) break /* MOAN */;}
for(l=0,j=c;j>255;j=j==q?p:a[j]) w[l++]=b[j]; w[l++]=j;
a[q]=p; b[q]=j; if(c==q) w[0]=j; pn[q]=pc;
should read:-
else if(c==2) {pc++;
for(m=256;m<0x10000;m++) b[m]&=0x7fff;
for(m=256;m<0x10000;m++) if(a[m]>255) b[a[m]]|=0x8000;
for(m=0;m<0x10000;m++) if(b[m]>=0) a[m]=b[m]=0;
for(q=257;b[q];q++) if(q>=0x10000) break /* MOAN */;}
for(l=0,j=c;j>255;j=j==q?p:a[j]) w[l++]=b[j]; w[l++]=j;
a[q]=p; b[q]=j|0x8000; if(c==q) w[0]=j; pn[q]=pc;
or trouble may happen if the file is long or longish and contains \000 bytes.