Index: src/OFZIPArchive.m ================================================================== --- src/OFZIPArchive.m +++ src/OFZIPArchive.m @@ -424,12 +424,22 @@ [super dealloc]; } - (bool)matchesEntry: (OFZIPArchiveEntry*)entry { + /* + * Bit 11 is the Language Encoding Flag, which some implementations + * only set in the Central Directory Entry, but not in the Local File + * Header. Therefore, ignore it for the comparison of the General + * Purpose Bit Flag. + */ + uint16_t generalPurposeBitFlag = _generalPurposeBitFlag & ~(1 << 11); + uint16_t entryGeneralPurposeBitFlag = + [entry OF_generalPurposeBitFlag] & ~(1 << 11); + if (_minVersionNeeded != [entry minVersionNeeded] || - _generalPurposeBitFlag != [entry OF_generalPurposeBitFlag] || + generalPurposeBitFlag != entryGeneralPurposeBitFlag || _compressionMethod != [entry compressionMethod] || _lastModifiedFileTime != [entry OF_lastModifiedFileTime] || _lastModifiedFileDate != [entry OF_lastModifiedFileDate]) return false;