Skip to content

Commit 2eb50a3

Browse files
committed
Add tests validating class file validity and message contents
1 parent ee2c478 commit 2eb50a3

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

src/test/java/software/coley/lljzip/PartParseTests.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.junit.jupiter.api.Test;
44
import org.junit.jupiter.params.ParameterizedTest;
55
import org.junit.jupiter.params.provider.ValueSource;
6+
import org.objectweb.asm.ClassReader;
7+
import org.objectweb.asm.ClassWriter;
68
import software.coley.lljzip.format.compression.ZipCompressions;
79
import software.coley.lljzip.format.model.LocalFileHeader;
810
import software.coley.lljzip.format.model.ZipArchive;
@@ -14,6 +16,7 @@
1416
import java.io.IOException;
1517
import java.nio.file.Path;
1618
import java.nio.file.Paths;
19+
import java.util.List;
1720

1821
import static org.junit.jupiter.api.Assertions.*;
1922

@@ -105,6 +108,35 @@ public void testConcatAndMerged(String name) {
105108
}
106109
}
107110

111+
@ParameterizedTest
112+
@ValueSource(strings = {
113+
"hello-concat.jar",
114+
"hello-concat-junkheader.jar",
115+
"hello-merged.jar",
116+
"hello-merged-fake-empty.jar",
117+
"hello-merged-junkheader.jar",
118+
"hello-secret-0-length-locals.jar",
119+
"hello-secret-junkheader.jar",
120+
"hello-secret-trailing-slash.jar",
121+
"hello-secret-trailing-slash-0-length-locals.jar",
122+
})
123+
public void testJvmCanRecoverData(String name) {
124+
try {
125+
Path path = Paths.get("src/test/resources/" + name);
126+
ZipArchive zip = ZipIO.readJvm(path);
127+
List<LocalFileHeader> localFiles = zip.getNameFilteredLocalFiles(n -> n.contains(".class"));
128+
assertEquals(1, localFiles.size(), "More than 1 class");
129+
byte[] decompressed = ByteDataUtil.toByteArray(ZipCompressions.decompress(localFiles.get(0)));
130+
assertDoesNotThrow(() -> {
131+
ClassWriter cw = new ClassWriter(0);
132+
ClassReader cr = new ClassReader(decompressed);
133+
cr.accept(cw, 0);
134+
}, "Failed to read class, must have failed to decompress");
135+
} catch (IOException ex) {
136+
fail(ex);
137+
}
138+
}
139+
108140
@Test
109141
public void testLocalHeaderDetectMismatch() {
110142
Path path = Paths.get("src/test/resources/hello-secret-0-length-locals.jar");

src/test/java/software/coley/lljzip/PatchingTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import org.junit.jupiter.api.Test;
44
import org.junit.jupiter.params.ParameterizedTest;
55
import org.junit.jupiter.params.provider.ValueSource;
6-
import software.coley.lljzip.format.model.LocalFileHeader;
76
import software.coley.lljzip.format.model.ZipArchive;
87
import software.coley.lljzip.format.transform.IdentityZipPartMapper;
98
import software.coley.lljzip.format.transform.JvmClassDirectoryMapper;
@@ -59,7 +58,7 @@ public void testTrickJarPatched(String name) {
5958
}
6059

6160
// Parse the zip with LL-Java zip, then write back using std java apis
62-
// in order to create a std java complaint jar.
61+
// in order to create a std java compliant jar.
6362
ZipArchive zip = ZipIO.readJvm(path);
6463
new ZipOutputStreamZipWriter().write(zip, baos);
6564
byte[] fixed = baos.toByteArray();

0 commit comments

Comments
 (0)