Skip to content

Commit eddf893

Browse files
committed
Migrate pulling CEN values in JVM local header to adoptLinkedCentralDirectoryValues()
1 parent bfa43f9 commit eddf893

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

src/main/java/software/coley/lljzip/format/model/JvmLocalFileHeader.java

+23-11
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)