Buggy code:
protected void finalize ( ) throws Throwable { } private static final int CFH_LEN = ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ZipFile . SHORT ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . WORD ) ) + ( ZipFile . WORD ) ) + ( ZipFile . WORD ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . WORD ) ) + ( ZipFile . WORD ) ; private Map populateFromCentralDirectory ( ) throws IOException { HashMap noUTF8Flag = new HashMap ( ) ; positionAtCentralDirectory ( ) ; byte [ ] cfh = new byte [ ZipFile . CFH_LEN ] ; byte [ ] signatureBytes = new byte [ ZipFile . WORD ] ; archive . readFully ( signatureBytes ) ; long sig = ZipLong . getValue ( signatureBytes ) ; final long cfhSig = ZipLong . getValue ( CFH_SIG ) ; if ( ( sig != cfhSig ) && ( startsWithLocalFileHeader ( ) ) ) { throw new IOException ( ( "central<seq2seq4repair_space>directory<seq2seq4repair_space>is<seq2seq4repair_space>empty,<seq2seq4repair_space>can't<seq2seq4repair_space>expand" + "<seq2seq4repair_space>corrupt<seq2seq4repair_space>archive." ) ) ; } while ( sig == cfhSig ) { archive . readFully ( cfh ) ; int off = 0 ; ZipArchiveEntry ze = new ZipArchiveEntry ( ) ; int versionMadeBy = ZipShort . getValue ( cfh , off ) ; off += ZipFile . SHORT ; ze . setPlatform ( ( ( versionMadeBy > > ( ZipFile . BYTE_SHIFT ) ) & ( ZipFile . NIBLET_MASK ) ) ) ; off += ZipFile . SHORT ; final GeneralPurposeBit gpFlag = GeneralPurposeBit . parse ( cfh , off ) ; final boolean hasUTF8Flag = gpFlag . usesUTF8ForNames ( ) ; final ZipEncoding entryEncoding = ( hasUTF8Flag ) ? ZipEncodingHelper . UTF8_ZIP_ENCODING : zipEncoding ; ze . setGeneralPurposeBit ( gpFlag ) ; off += ZipFile . SHORT ; ze . setMethod ( ZipShort . getValue ( cfh , off ) ) ; off += ZipFile . SHORT ; long time = ZipUtil . dosToJavaTime ( ZipLong . getValue ( cfh , off ) ) ; ze . setTime ( time ) ; off += ZipFile . WORD ; ze . setCrc ( ZipLong . getValue ( cfh , off ) ) ; off += ZipFile . WORD ; ze . setCompressedSize ( ZipLong . getValue ( cfh , off ) ) ; off += ZipFile . WORD ; ze . setSize ( ZipLong . getValue ( cfh , off ) ) ; off += ZipFile . WORD ; int fileNameLen = ZipShort . getValue ( cfh , off ) ; off += ZipFile . SHORT ; int extraLen = ZipShort . getValue ( cfh , off ) ; off += ZipFile . SHORT ; int commentLen = ZipShort . getValue ( cfh , off ) ; off += ZipFile . SHORT ; off += ZipFile . SHORT ; ze . setInternalAttributes ( ZipShort . getValue ( cfh , off ) ) ; off += ZipFile . SHORT ; ze . setExternalAttributes ( ZipLong . getValue ( cfh , off ) ) ; off += ZipFile . WORD ; byte [ ] fileName = new byte [ fileNameLen ] ; archive . readFully ( fileName ) ; <START_BUG> ze . setName ( entryEncoding . decode ( fileName ) , fileName ) ; <END_BUG> ZipFile . OffsetEntry offset = new ZipFile . OffsetEntry ( ) ; offset . headerOffset = ZipLong . getValue ( cfh , off ) ; entries . put ( ze , offset ) ; nameMap . put ( ze . getName ( ) , ze ) ; byte [ ] cdExtraData = new byte [ extraLen ] ; archive . readFully ( cdExtraData ) ; ze . setCentralDirectoryExtra ( cdExtraData ) ; byte [ ] comment = new byte [ commentLen ] ; archive . readFully ( comment ) ; ze . setComment ( entryEncoding . decode ( comment ) ) ; archive . readFully ( signatureBytes ) ; sig = ZipLong . getValue ( signatureBytes ) ; if ( ( ! hasUTF8Flag ) && ( useUnicodeExtraFields ) ) { noUTF8Flag . put ( ze , new ZipFile . NameAndComment ( fileName , comment ) ) ; } } return noUTF8Flag ; } private static final int MIN_EOCD_SIZE = ( ( ( ( ( ( ( ZipFile . WORD ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . WORD ) ) + ( ZipFile . WORD ) ) + ( ZipFile . SHORT ) ; private static final int MAX_EOCD_SIZE = ( ZipFile . MIN_EOCD_SIZE ) + 65535 ; private static final int CFD_LOCATOR_OFFSET = ( ( ( ( ( ZipFile . WORD ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . WORD ) ; private void positionAtCentralDirectory ( ) throws IOException { } private static final long LFH_OFFSET_FOR_FILENAME_LENGTH = ( ( ( ( ( ( ( ( ZipFile . WORD ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . SHORT ) ) + ( ZipFile . WORD ) ) + ( ZipFile . WORD ) ) + ( ZipFile . WORD ) ; private void resolveLocalFileHeaderData ( Map entriesWithoutUTF8Flag ) throws IOException { } private boolean startsWithLocalFileHeader ( ) throws IOException { }

Fix:
ze . setName ( entryEncoding . decode ( fileName ) ) ;