@@ -90,20 +90,32 @@ public void read(@Nonnull ByteData data, long offset) {
90
90
}
91
91
92
92
@ 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 ;
95
97
96
98
// JVM trusts central directory file header contents over local
97
99
// - 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
+ //
107
119
// Update file data with new compressed/uncompressed size if it was not able to be found previously
108
120
// with only the local data available.
109
121
if (!foundData ) {
0 commit comments