Skip to content

Commit 7cf8bd8

Browse files
authored
Merge pull request #88 from holtherndon-stripe/holtherndon/bug-fixes
Bug fixes: incorrect `keep` directive, race condition, and improve logging
2 parents 003b523 + 9a648f4 commit 7cf8bd8

File tree

5 files changed

+35
-11
lines changed

5 files changed

+35
-11
lines changed

core/src/main/scala/com/eed3si9n/jarjar/JJProcessor.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ class JJProcessor(
116116
System.err.println(s"Skipped $name without processing because $name == ${struct.name}")
117117
}
118118
}
119+
} else {
120+
if (verbose) {
121+
System.err.println(s"Removed $name due to chain rejection")
122+
}
119123
}
120124
keepIt
121125
}

jarjar/src/main/java/com/eed3si9n/jarjar/DepFind.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ public void run(String from, String to, DepHandler handler) throws IOException {
4444
header.read(in);
4545
classes.put(header.getClassName(), entry.getSource());
4646
} catch (Exception e) {
47-
System.err.println("Error reading " + entry.getName() + ": " + e.getMessage());
47+
System.err.println("[DepFind] Error reading " + entry.getName() + ": " + e.getMessage());
48+
e.printStackTrace(System.err);
4849
} finally {
4950
in.close();
5051
}
@@ -64,7 +65,8 @@ public void run(String from, String to, DepHandler handler) throws IOException {
6465
new DepFindVisitor(classes, entry.getSource(), handler),
6566
ClassReader.SKIP_DEBUG);
6667
} catch (Exception e) {
67-
System.err.println("Error reading " + entry.getName() + ": " + e.getMessage());
68+
System.err.println("[DepFind] Error reading " + entry.getName() + ": " + e.getMessage());
69+
e.printStackTrace(System.err);
6870
} finally {
6971
in.close();
7072
}

jarjar/src/main/java/com/eed3si9n/jarjar/KeepProcessor.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,35 +56,46 @@ private void recursiveProcessDependencies(Set<String> result, Collection<String>
5656
}
5757
}
5858

59+
private final Object csdMutex = new Object();
5960
private Set<String> currentDependenciesSet;
6061

6162
public boolean process(EntryStruct struct) throws IOException {
6263
if (struct.name.endsWith(".class")) {
6364
String name = struct.name.substring(0, struct.name.length() - 6);
64-
depend.put(name, currentDependenciesSet = new HashSet<String>());
65+
66+
synchronized (csdMutex) {
67+
currentDependenciesSet = new HashSet<String>();
68+
depend.put(name, currentDependenciesSet);
69+
}
70+
6571
try {
6672
new ClassReader(new ByteArrayInputStream(struct.data)).accept(cv,
6773
ClassReader.EXPAND_FRAMES);
68-
currentDependenciesSet.remove(name);
74+
75+
synchronized (csdMutex) {
76+
currentDependenciesSet.remove(name);
77+
}
6978
} catch (Exception e) {
70-
System.err.println("Error reading " + struct.name + ": " + e.getMessage());
79+
System.err.println("[KeepProcessor] Error reading " + struct.name + ": " + e.getMessage());
80+
e.printStackTrace(System.err);
7181
}
7282

7383
for (Wildcard wildcard : wildcards) {
7484
if (wildcard.matches(name)) {
7585
roots.add(name);
76-
return true;
86+
break;
7787
}
7888
}
79-
return false;
8089
}
8190
return true;
8291
}
8392

8493
public String map(String key) {
8594
if (key.startsWith("java/") || key.startsWith("javax/"))
8695
return null;
87-
currentDependenciesSet.add(key);
96+
synchronized (csdMutex) {
97+
currentDependenciesSet.add(key);
98+
}
8899
return null;
89100
}
90101

jarjar/src/main/java/com/eed3si9n/jarjar/StringDumper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public void run(String classPath, PrintWriter pw) throws IOException {
3535
try {
3636
new ClassReader(in).accept(stringReader, 0);
3737
} catch (Exception e) {
38-
System.err.println("Error reading " + entry.getName() + ": " + e.getMessage());
38+
System.err.println("[StringDumper] Error reading " + entry.getName() + ": " + e.getMessage());
39+
e.printStackTrace(System.err);
3940
} finally {
4041
in.close();
4142
}

jarjar/src/test/java/com/eed3si9n/jarjar/KeepProcessorTest.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ public void testKeep() throws IOException {
2121
assertTrue(keepProcessor.process(entryStruct));
2222

2323
entryStruct.name = "com/example/Object.class";
24-
assertFalse(keepProcessor.process(entryStruct));
24+
assertTrue(keepProcessor.process(entryStruct));
25+
26+
assertFalse(keepProcessor.getExcludes().contains("org/example/Object"));
27+
assertTrue(keepProcessor.getExcludes().contains("com/example/Object"));
2528
}
2629

2730
@Test
@@ -35,6 +38,9 @@ public void testMetaInfKeep() throws IOException {
3538
assertTrue(keepProcessor.process(entryStruct));
3639

3740
entryStruct.name = "META-INF/versions/8/com/example/Object.class";
38-
assertFalse(keepProcessor.process(entryStruct));
41+
assertTrue(keepProcessor.process(entryStruct));
42+
43+
assertFalse(keepProcessor.getExcludes().contains("META-INF/versions/9/org/example/Object"));
44+
assertTrue(keepProcessor.getExcludes().contains("META-INF/versions/8/com/example/Object"));
3945
}
4046
}

0 commit comments

Comments
 (0)