error-prone icon indicating copy to clipboard operation
error-prone copied to clipboard

JavacFileManager got a recursive loop and OOM exit

Open pli2014 opened this issue 3 years ago • 0 comments

specail jar struct as below :

image

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<Path>() {
                    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<Path>() {
                    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;
                        }
                    }
                });
            }

pli2014 avatar Aug 16 '22 06:08 pli2014