Skip to content

Commit b528432

Browse files
committed
Do not put corrupt jar in class/module path
1 parent 375c8c0 commit b528432

File tree

1 file changed

+22
-0
lines changed
  • org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac

1 file changed

+22
-0
lines changed

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac/JavacUtils.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package org.eclipse.jdt.internal.javac;
1212

1313
import java.io.File;
14+
import java.io.IOException;
1415
import java.lang.Runtime.Version;
1516
import java.util.ArrayList;
1617
import java.util.Arrays;
@@ -25,6 +26,7 @@
2526
import java.util.Queue;
2627
import java.util.Set;
2728
import java.util.function.Predicate;
29+
import java.util.jar.JarFile;
2830
import java.util.stream.Collectors;
2931
import java.util.stream.Stream;
3032

@@ -317,6 +319,7 @@ private static void configurePaths(JavaProject javaProject, Context context, Jav
317319
.collect(Collectors.toSet());
318320

319321
Collection<File> modulePathFiles = classpathEntriesToFiles(javaProject, false, entry -> (isTest || !entry.isTest()) && ClasspathEntry.isModular(entry));
322+
modulePathFiles.removeIf(JavacUtils::isCorrupt);
320323
if (!moduleProjects.isEmpty()) {
321324
modulePathFiles = new LinkedHashSet<>(modulePathFiles);
322325
moduleProjects.stream()
@@ -336,6 +339,7 @@ private static void configurePaths(JavaProject javaProject, Context context, Jav
336339
fileManager.setLocation(StandardLocation.MODULE_PATH, modulePathFiles);
337340
Collection<File> classpathFiles = classpathEntriesToFiles(javaProject, false, entry -> (isTest || !entry.isTest()) && !ClasspathEntry.isModular(entry));
338341
classpathFiles.addAll(outDirectories(javaProject, entry -> isTest || !entry.isTest()));
342+
classpathFiles.removeIf(JavacUtils::isCorrupt);
339343
fileManager.setLocation(StandardLocation.CLASS_PATH, classpathFiles);
340344

341345
if (!skipModules && !moduleSourcePathEnabled && javaProject.getModuleDescription() != null) {
@@ -512,4 +516,22 @@ public void visitMethodDef(JCMethodDecl decl) {
512516
}
513517
});
514518
}
519+
520+
private static boolean isCorrupt(File f) {
521+
if (f == null || !f.canRead()) {
522+
return true;
523+
}
524+
if (f.isDirectory()) {
525+
return false;
526+
}
527+
if (f.isFile() && f.getName().endsWith(".jar")) {
528+
try (JarFile jarFile = new JarFile(f)) {
529+
jarFile.entries().asIterator().forEachRemaining(e -> {});
530+
} catch (IOException ex) {
531+
return true;
532+
}
533+
}
534+
return false;
535+
536+
}
515537
}

0 commit comments

Comments
 (0)