diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-06 02:25:22 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-06 02:25:22 +0200 |
commit | 6baaf0a7735a875d5d5384362e535ce127996926 (patch) | |
tree | 5cb785a52ac69b635dfacfba9820ae605de9e159 /sys/src/cmd/tapefs | |
parent | 5eec707368a91687c5e8ff7941ab6df5bf9e7fa3 (diff) |
unzip/zipfs: skip over variable length comment in end of table of content record
Diffstat (limited to 'sys/src/cmd/tapefs')
-rw-r--r-- | sys/src/cmd/tapefs/zipfs.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/src/cmd/tapefs/zipfs.c b/sys/src/cmd/tapefs/zipfs.c index 4017a3906..a7279b2e0 100644 --- a/sys/src/cmd/tapefs/zipfs.c +++ b/sys/src/cmd/tapefs/zipfs.c @@ -189,10 +189,14 @@ findCDir(Biobuf *bin) ecoff = Bseek(bin, -ZECHeadSize, 2); if(ecoff < 0) sysfatal("can't seek to header"); - - if(get4(bin) != ZECHeader) - sysfatal("bad magic number on directory"); - + off = 0; + while(get4(bin) != ZECHeader){ + if(ecoff <= 0 || off >= 1024) + sysfatal("bad magic number"); + off++; + ecoff--; + Bseek(bin, ecoff, 0); + } get2(bin); get2(bin); get2(bin); |