summaryrefslogtreecommitdiff
path: root/packages/unzip
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-08-21 04:33:51 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-08-21 04:33:51 +0000
commit0e5a6cedee287eb076669a463c759aa835127698 (patch)
tree27bf5ae125eeaed5b19edc95e636619871a8e8f4 /packages/unzip
parentf3f3f607689bffd411c9468690a06b66aa73bb2a (diff)
downloadfpc-0e5a6cedee287eb076669a463c759aa835127698.tar.gz
* patch from Dmitry for bug 7604, fixing the CRC problems.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15864 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/unzip')
-rw-r--r--packages/unzip/src/unzip51g.pp12
1 files changed, 11 insertions, 1 deletions
diff --git a/packages/unzip/src/unzip51g.pp b/packages/unzip/src/unzip51g.pp
index 79d1250339..1de27749cc 100644
--- a/packages/unzip/src/unzip51g.pp
+++ b/packages/unzip/src/unzip51g.pp
@@ -2410,8 +2410,18 @@ BEGIN
originalcrc := b AND $FFFF;
dumpbits ( 16 );
needbits ( 16 );
- originalcrc := ( b AND $FFFF ) SHL 16;
+ originalcrc := originalcrc OR LongWord(( b AND $FFFF ) SHL 16);
dumpbits ( 16 );
+
+ IF originalcrc = $08074b50 THEN BEGIN
+ { skiping possible $08074b50 data descriptor signature. see PKWARE APPNOTE.txt }
+ needbits ( 16 );
+ originalcrc := b AND $FFFF;
+ dumpbits ( 16 );
+ needbits ( 16 );
+ originalcrc := originalcrc OR LongWord(( b AND $FFFF ) SHL 16);
+ dumpbits ( 16 );
+ END;
END;
close ( infile );