Infinite recursion risk in ToolchainDiscoverer.getCanonicalPath() for root paths
Maintainer thường phản hồi trong vòng 2 ngày
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 76/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- java
- Lĩnh vực
- build-system
Hướng nghiên cứu
Bắt đầu với ToolchainDiscoverer.java:267-273 và kiểm tra cách getCanonicalPath() được sử dụng trong quá trình phát hiện JDK. Kiểm thử các đường dẫn root và các đường dẫn lồng sâu mà các lệnh gọi toRealPath() bị lỗi, sau đó xác minh rằng phương thức trả về an toàn mà không có đệ quy, NPE hoặc tràn ngăn xếp.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
ToolchainDiscoverer.getCanonicalPath() has a recursive fallback that can cause infinite recursion or stack overflow for root paths where path.getParent() returns null.
Location
ToolchainDiscoverer.java:267-273
Code
private static Path getCanonicalPath(Path path) {
try {
return path.toRealPath();
} catch (IOException e) {
return getCanonicalPath(path.getParent()).resolve(path.getFileName());
}
}
Problem
- If
pathis a root directory (e.g./on Linux orC:\on Windows),path.getParent()returnsnull. The recursive callgetCanonicalPath(null)throws NPE. - If
path.getParent()itself fails with IOException, this creates infinite recursion leading to stack overflow. - The recursive approach also has no depth limit, so deeply nested paths that fail
toRealPath()will recurse until stack overflow.
Impact
JDK discovery scanning directories like / or other root-relative paths could crash Maven with a stack overflow or NPE instead of gracefully skipping the problematic path.
Suggested Fix
Replace recursion with iteration:
private static Path getCanonicalPath(Path path) {
try {
return path.toRealPath();
} catch (IOException e) {
Path parent = path.getParent();
if (parent == null) {
return path;
}
return getCanonicalPath(parent).resolve(path.getFileName());
}
}
Or better, use a non-recursive loop with null checks to eliminate the recursion entirely.
- Ngôn ngữ chính
- Java
- Star
- 27
- Fork
- 32
- Merge trung bình
- 1 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 3
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Không có hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của apache/maven-toolchains-plugin
-
NPE during display-discovered-jdk-toolchains goal in ToolchainDiscoverer.discoverToolchains()Có thể đã có người làm @efegokdemir đã nhận 14 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
apache/maven-toolchains-plugin#191 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
New select-jdk-toolchain goal should warn about empty configCó thể đã có người làm @efegokdemir đã nhận 13 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
apache/maven-toolchains-plugin#183 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Unnecessary static synchronization in ToolchainMojo causes contention in multi-module buildsCó thể đã có người làm @elharo đã nhận 77 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/maven-toolchains-plugin#174 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Dead code: unreachable null check on @Parameter(required=true) in ToolchainMojoCó thể đã có người làm @efegokdemir đã nhận 13 ngày trước. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
apache/maven-toolchains-plugin#175 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
NPE in ToolchainsRequirement.getParams() when type is not foundCó thể đã có người làm @efegokdemir đã nhận 14 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
apache/maven-toolchains-plugin#169 ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của apache/maven-toolchains-plugin
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
java-native-access/jna#1740 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
portfolio-performance/portfolio#6119 ·
Maintainer thường phản hồi trong vòng 8 ngày
-
Bump up AWS SDK to 2.54.3Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
jenkinsci/ec2-plugin#2041 ·
-
L: github:actions L: php:composer
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
dependabot/dependabot-core#16493 ·
Maintainer thường phản hồi trong vòng 1 ngày