JavacFileManager got a recursive loop and OOM exit
- Dominant language
- Java
- Stars
- 7.2k
- Forks
- 820
- Avg merge
- 5h 9m
- Merged PRs (30d)
- 50
Description
specail jar struct as below :

com.sun.tools.javac.file.JavacFileManager.ArchiveContainer
issue code as below:
this map has same object with new RelativeDirectory(relativePath).
```
while(var5.hasNext()) {
final Path root = (Path)var5.next();
Files.walkFileTree(root, EnumSet.noneOf(FileVisitOption.class), 2147483647, new SimpleFileVisitor() {
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
String relativePath = root.relativize(dir).toString();
if (ArchiveContainer.this.isValid(dir.getFileName()) && !ArchiveContainer.this.packages.containsKey(new RelativeDirectory(relativePath))) {
ArchiveContainer.this.packages.put(new RelativeDirectory(relativePath), dir);
return FileVisitResult.CONTINUE;
} else {
return FileVisitResult.SKIP_SUBTREE;
}
}
});
}
```
fixed this as below:
```
while(var5.hasNext()) {
final Path root = (Path)var5.next();
Files.walkFileTree(root, EnumSet.noneOf(FileVisitOption.class), 2147483647, new SimpleFileVisitor() {
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
String relativePath = root.relativize(dir).toString();
if (ArchiveContainer.this.isValid(dir.getFileName()) && !ArchiveContainer.this.packages.containsKey(new RelativeDirectory(relativePath))) {
ArchiveContainer.this.packages.put(new RelativeDirectory(relativePath), dir);
return FileVisitResult.CONTINUE;
} else {
return FileVisitResult.SKIP_SUBTREE;
}
}
});
}
```
Contributor guide
Assessment
This issue has not been assessed yet.