Skip to content

Commit

Permalink
Fix parsing zip64 extra field
Browse files Browse the repository at this point in the history
  • Loading branch information
kinolaev authored Jul 8, 2020
1 parent 37c83b7 commit 5af315c
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions lib/parseExtraField.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,25 @@ module.exports = function(extraField, vars) {
while(!extra && extraField && extraField.length) {
var candidateExtra = binary.parse(extraField)
.word16lu('signature')
.word16lu('partsize')
.word64lu('uncompressedSize')
.word64lu('compressedSize')
.word64lu('offset')
.word64lu('disknum')
.vars;

if(candidateExtra.signature === 0x0001) {
extra = candidateExtra;
.word16lu('partsize');

if(candidateExtra.vars.signature === 0x0001) {
// the fields MUST only appear if the corresponding
// Local or Central directory record field is set to 0xFFFF or 0xFFFFFFFF
if (vars.uncompressedSize === 0xffffffff)
candidateExtra.word64lu('uncompressedSize');
if (vars.compressedSize === 0xffffffff)
candidateExtra.word64lu('compressedSize');
if (vars.offsetToLocalFileHeader === 0xffffffff)
candidateExtra.word64lu('offset');
if (vars.diskNumber === 0xffff)
candidateExtra.word32lu('disknum');

extra = candidateExtra.vars;
} else {
// Advance the buffer to the next part.
// The total size of this part is the 4 byte header + partsize.
extraField = extraField.slice(candidateExtra.partsize + 4);
extraField = extraField.slice(candidateExtra.vars.partsize + 4);
}
}

Expand Down

0 comments on commit 5af315c

Please sign in to comment.