Permalink
Browse files

Protect against roots that are contained within other roots

Summary:
For example, I could have a root named `random` and another root named `randomColor`.
A child of `randomColor` would **incorrectly** pass as a descendant of `random`.

So this commit changes `isDescendant` to do 2 things:
- check for exact matches (eg: the path is a root)
- call `startsWith` like before, but append `path.sep` to avoid false positives
Closes #9831

Differential Revision: D3864968

fbshipit-source-id: 7fe04913579aa0741840fc925216283304ae3433
  • Loading branch information...
1 parent 3dac49a commit d4dff25292086cbfa006d7563157f6dc0f1a4440 @aleclarson aleclarson committed with Facebook Github Bot 9 Sep 14, 2016
@@ -70,7 +70,7 @@ function watchmanRecReadDir(roots, {ignore, fileWatcher, exts}) {
}
function isDescendant(root, child) {
- return child.startsWith(root);
+ return root === child || child.startsWith(root + path.sep);
}
module.exports = watchmanRecReadDir;
@@ -362,7 +362,7 @@ function makeReadCallback(fd, predicate, callback) {
}
function isDescendant(root, child) {
- return child.startsWith(root);
+ return root === child || child.startsWith(root + path.sep);
}
module.exports = Fastfs;

0 comments on commit d4dff25

Please sign in to comment.