summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2014-05-20 22:12:58 +0000
committerJustin Bogner <mail@justinbogner.com>2014-05-20 22:12:58 +0000
commit1c078f2b1f7420c1445e9cda13acf7d022560db6 (patch)
tree649dcb89b39ab855e41d69acef3916a2ec875992 /clang/lib/Basic
parent38ff5677439dd524b0d8fc9fa9b418feaa92c100 (diff)
downloadbcm5719-llvm-1c078f2b1f7420c1445e9cda13acf7d022560db6.tar.gz
bcm5719-llvm-1c078f2b1f7420c1445e9cda13acf7d022560db6.zip
VirtualFileSystem: Fix false positives in YAMLVFSWriter::containedIn
Checking if a path starts with another path isn't sufficient for determining if one is contained within the heirarchy of the other. We need to ensure that the substring ends at a directory boundary. llvm-svn: 209250
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r--clang/lib/Basic/VirtualFileSystem.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/Basic/VirtualFileSystem.cpp b/clang/lib/Basic/VirtualFileSystem.cpp
index 24454b0192c..077370dcf42 100644
--- a/clang/lib/Basic/VirtualFileSystem.cpp
+++ b/clang/lib/Basic/VirtualFileSystem.cpp
@@ -928,7 +928,16 @@ YAMLVFSWriter::printContents(llvm::raw_ostream &OS, ArrayRef<MapEntry> Entries,
}
bool YAMLVFSWriter::containedIn(StringRef Parent, StringRef Path) {
- return Path.startswith(Parent);
+ using namespace llvm::sys;
+ // Compare each path component.
+ auto IParent = path::begin(Parent), EParent = path::end(Parent);
+ for (auto IChild = path::begin(Path), EChild = path::end(Path);
+ IParent != EParent && IChild != EChild; ++IParent, ++IChild) {
+ if (*IParent != *IChild)
+ return false;
+ }
+ // Have we exhausted the parent path?
+ return IParent == EParent;
}
StringRef YAMLVFSWriter::containedPart(StringRef Parent, StringRef Path) {
OpenPOWER on IntegriCloud