Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
Description
Hello,
Our code analyses found a following potential NPE:
public Path getParent() { String path = uri.getPath(); int lastSlash = path.lastIndexOf('/'); int start = startPositionWithoutWindowsDrive(path); if ((path.length() == start) || // empty path (lastSlash == start && path.length() == start+1)) { // at root return null; <--- Null returned }
private static void getDirectories(final String key, final String sourceKey, final Set<String> directories) { Path p = new Path(key); Path sourcePath = new Path(sourceKey); // directory must add first if (key.endsWith("/") && p.compareTo(sourcePath) > 0) { directories.add(p.toString()); } while (p.compareTo(sourcePath) > 0) { p = p.getParent(); <--- NPE if (p.isRoot() || p.compareTo(sourcePath) == 0) { break; }
Given a root path, it will lead to NPE at method getDirectories
Full trace:
1. Return null to caller
https://github.com/apache/hadoop/blob/f40e3eb0590f85bb42d2471992bf5d524628fdd6/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/Path.java#L432
2. Function getParent executes and returns
https://github.com/apache/hadoop/blob/f40e3eb0590f85bb42d2471992bf5d524628fdd6/hadoop-cloud-storage-project/hadoop-huaweicloud/src/main/java/org/apache/hadoop/fs/obs/OBSObjectBucketUtils.java#L875
3. The return value of function getParent is passed as the this pointer to function isRoot (the return value of function getParent can be null)
https://github.com/apache/hadoop/blob/f40e3eb0590f85bb42d2471992bf5d524628fdd6/hadoop-cloud-storage-project/hadoop-huaweicloud/src/main/java/org/apache/hadoop/fs/obs/OBSObjectBucketUtils.java#L876
Commit: f40e3eb0590f85bb42d2471992bf5d524628fdd6
Attachments
Issue Links
- links to