Index: unzip60/process.c =================================================================== --- unzip60.orig/process.c +++ unzip60/process.c @@ -1286,7 +1286,8 @@ static int find_ecrec64(__G__ searchlen) G.ecrec.number_this_disk, ecloc64_total_disks); fflush(stdout); #endif if ((G.ecrec.number_this_disk != 0xFFFF) && - (G.ecrec.number_this_disk != ecloc64_total_disks - 1)) { + (G.ecrec.number_this_disk != ecloc64_total_disks - 1) && + (ecloc64_total_disks != 0)) { /* Note: For some unknown reason, the developers at PKWARE decided to store the "zip64 total disks" value as a counter starting from 1, whereas all other "split/span volume" related fields use 0-based @@ -1296,6 +1297,9 @@ static int find_ecrec64(__G__ searchlen) When this is not the case, the found ecrec64 locator cannot be valid. -> This is not a Zip64 archive. */ + /* There are archive creators that put 0 in total disks when it should + be 1. We should handle this. This is done by the added check above. + */ Trace((stderr, "\ninvalid ECLOC64, differing disk# (ECR %u, ECL64 %lu)\n", G.ecrec.number_this_disk, ecloc64_total_disks - 1));