@@ -90,20 +90,32 @@ public void read(@Nonnull ByteData data, long offset) {
9090 }
9191
9292 @ Override
93- public void link (CentralDirectoryFileHeader directoryFileHeader ) {
94- super .link (directoryFileHeader );
93+ public void adoptLinkedCentralDirectoryValues () {
94+ CentralDirectoryFileHeader directoryFileHeader = linkedDirectoryFileHeader ;
95+ if (directoryFileHeader == null )
96+ return ;
9597
9698 // JVM trusts central directory file header contents over local
9799 // - Using fields as this maintains the lazy model
98- compressionMethod = directoryFileHeader .compressionMethod ;
99- compressedSize = directoryFileHeader .compressedSize ;
100- uncompressedSize = directoryFileHeader .uncompressedSize ;
101- fileName = directoryFileHeader .fileName ;
102- generalPurposeBitFlag = directoryFileHeader .generalPurposeBitFlag ;
103- crc32 = directoryFileHeader .crc32 ;
104- lastModFileDate = directoryFileHeader .lastModFileDate ;
105- lastModFileTime = directoryFileHeader .lastModFileTime ;
106-
100+ versionNeededToExtract = linkedDirectoryFileHeader .versionNeededToExtract ;
101+ generalPurposeBitFlag = linkedDirectoryFileHeader .generalPurposeBitFlag ;
102+ compressionMethod = linkedDirectoryFileHeader .compressionMethod ;
103+ lastModFileTime = linkedDirectoryFileHeader .lastModFileTime ;
104+ lastModFileDate = linkedDirectoryFileHeader .lastModFileDate ;
105+ crc32 = linkedDirectoryFileHeader .crc32 ;
106+ fileNameLength = linkedDirectoryFileHeader .fileNameLength ;
107+ fileName = linkedDirectoryFileHeader .fileName ;
108+ extraField = linkedDirectoryFileHeader .extraField ;
109+
110+ // The sizes are not used by the JVM parser.
111+ // It just says 'go until the next header'.
112+ //
113+ // compressedSize = directoryFileHeader.compressedSize;
114+ // uncompressedSize = directoryFileHeader.uncompressedSize;
115+ //
116+ // That being said, we want a fallback if no data is found.
117+ // This may occur if something with offset detection fails.
118+ //
107119 // Update file data with new compressed/uncompressed size if it was not able to be found previously
108120 // with only the local data available.
109121 if (!foundData ) {
0 commit comments