Skip to content

Commit 48ddde2

Browse files
committed
Simplify PK find
1 parent e886a86 commit 48ddde2

2 files changed

Lines changed: 8 additions & 17 deletions

File tree

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package software.coley.llzip.part;
22

3+
import software.coley.llzip.ZipPatterns;
4+
import software.coley.llzip.util.Array;
5+
36
import java.util.Arrays;
47

58
/**
@@ -10,24 +13,16 @@
1013
* @author Wolfie / win32kbase <i>(Reverse engineering JVM specific zip handling)</i>
1114
*/
1215
public class JvmLocalFileHeader extends LocalFileHeader {
13-
private final int nextPkPos;
14-
15-
/**
16-
* @param nextPkPos
17-
* Next offset of any {@link ZipPart}.
18-
* May also be the position of the end of the file.
19-
*/
20-
public JvmLocalFileHeader(int nextPkPos) {
21-
this.nextPkPos = nextPkPos;
22-
}
23-
2416
@Override
2517
public void read(byte[] data, int offset) {
2618
super.read(data, offset);
2719
int start = offset + 30 + getFileNameLength() + getExtraFieldLength();
2820
// JVM file data reading does NOT use the compressed/uncompressed fields.
2921
// Instead, it scans data until the next header/EOF.
30-
byte[] fileData = Arrays.copyOfRange(data, start, nextPkPos);
22+
int nextPk = Array.indexOf(data, offset + 1, ZipPatterns.PK);
23+
if (nextPk == -1)
24+
nextPk = data.length;
25+
byte[] fileData = Arrays.copyOfRange(data, start, nextPk);
3126
setFileData(fileData);
3227
}
3328
}

src/main/java/software/coley/llzip/strategy/JvmZipReaderStrategy.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,8 @@ else if (Array.startsWith(data, jvmBaseOffset, ZipPatterns.CENTRAL_DIRECTORY_FIL
8585
int offset = jvmBaseOffset + directory.getRelativeOffsetOfLocalHeader();
8686
if (!offsets.contains(offset) && Array.startsWith(data, offset, ZipPatterns.LOCAL_FILE_HEADER)) {
8787
// JVM local file header needs to be aware of where the NEXT entry is.
88-
int nextPk = Array.indexOf(data, offset + 1, ZipPatterns.PK);
89-
if (nextPk == -1) {
90-
nextPk = data.length;
91-
}
9288
try {
93-
JvmLocalFileHeader file = new JvmLocalFileHeader(nextPk);
89+
JvmLocalFileHeader file = new JvmLocalFileHeader();
9490
file.read(data, offset);
9591
zip.getParts().add(file);
9692
directory.link(file);

0 commit comments

Comments
 (0)