google / google/error-prone

JavacFileManager got a recursive loop and OOM exit

Open
#3,394 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
7.2k
Forks
820
Avg merge
5h 9m
Merged PRs (30d)
50

Description

specail jar struct as below :

![image](https://user-images.githubusercontent.com/6429799/184810191-f4198fe3-dbea-46a8-bb04-23053c5798f4.png)

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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.