Skip to content

Commit 1bfef36

Browse files
author
Patrick Meehan
committed
fixed unaligned apk zipfs bug (unaligned apk files have null crc32, compressed size and uncompressed size in file entry headers - use master zip file entry headers instead and do not compare crc32 fields)
1 parent addef68 commit 1bfef36

1 file changed

Lines changed: 6 additions & 9 deletions

File tree

src/zipfs/ZIPFSZipFile.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ typedef struct FileHeader {
6363
unsigned short mCompression; // 2 Compression method
6464
unsigned short mLastModTime; // 2 File last modification time
6565
unsigned short mLastModDate; // 2 File last modification date
66-
unsigned long mCrc32; // 4 CRC-32
67-
unsigned long mCompressedSize; // 4 Compressed size
68-
unsigned long mUncompressedSize; // 4 Uncompressed size
66+
unsigned long mCrc32; // 4 CRC-32 (*not* to be trusted - Android)
67+
unsigned long mCompressedSize; // 4 Compressed size (*not* to be trusted - Android)
68+
unsigned long mUncompressedSize; // 4 Uncompressed size (*not* to be trusted - Android)
6969
unsigned short mNameLength; // 2 File name length
7070
unsigned short mExtraFieldLength; // 2 Extra field length
7171

@@ -160,9 +160,9 @@ static int read_file_header ( FILE* file, FileHeader* header ) {
160160
fread ( &header->mCompression, 2, 1, file );
161161
fread ( &header->mLastModTime, 2, 1, file );
162162
fread ( &header->mLastModDate, 2, 1, file );
163-
fread ( &header->mCrc32, 4, 1, file );
164-
fread ( &header->mCompressedSize, 4, 1, file );
165-
fread ( &header->mUncompressedSize, 4, 1, file );
163+
fread ( &header->mCrc32, 4, 1, file ); // *not* to be trusted (Android)
164+
fread ( &header->mCompressedSize, 4, 1, file ); // *not* to be trusted (Android)
165+
fread ( &header->mUncompressedSize, 4, 1, file ); // *not* to be trusted (Android)
166166
fread ( &header->mNameLength, 2, 1, file );
167167
fread ( &header->mExtraFieldLength, 2, 1, file );
168168

@@ -697,9 +697,6 @@ ZIPFSZipStream* ZIPFSZipStream_Open ( ZIPFSZipFile* archive, const char* entryna
697697
// read local header
698698
result = read_file_header ( file, &fileHeader );
699699
if ( result ) goto error;
700-
701-
// sanity check
702-
if ( fileHeader.mCrc32 != entry->mCrc32 ) goto error;
703700

704701
// skip the extra field, etc.
705702
result = fseek ( file, fileHeader.mNameLength + fileHeader.mExtraFieldLength, SEEK_CUR );

0 commit comments

Comments
 (0)