[PATCH] D25561: Do not delete leading ../ in remove_dots.
Eric Liu via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 13 07:59:53 PDT 2016
ioeric created this revision.
ioeric added a reviewer: bkramer.
ioeric added a subscriber: llvm-commits.
https://reviews.llvm.org/D25561
Files:
include/llvm/Support/Path.h
lib/Support/Path.cpp
unittests/Support/Path.cpp
Index: unittests/Support/Path.cpp
===================================================================
--- unittests/Support/Path.cpp
+++ unittests/Support/Path.cpp
@@ -965,6 +965,7 @@
EXPECT_EQ("a\\..\\b\\c", remove_dots(".\\a\\..\\b\\c", false));
EXPECT_EQ("b\\c", remove_dots(".\\a\\..\\b\\c", true));
EXPECT_EQ("c", remove_dots(".\\.\\c", true));
+ EXPECT_EQ("..\\a\\c", remove_dots("..\\a\\b\\..\\c", true));
SmallString<64> Path1(".\\.\\c");
EXPECT_TRUE(path::remove_dots(Path1, true));
@@ -976,6 +977,7 @@
EXPECT_EQ("a/../b/c", remove_dots("./a/../b/c", false));
EXPECT_EQ("b/c", remove_dots("./a/../b/c", true));
EXPECT_EQ("c", remove_dots("././c", true));
+ EXPECT_EQ("../a/c", remove_dots("../a/b/../c", true));
SmallString<64> Path1("././c");
EXPECT_TRUE(path::remove_dots(Path1, true));
Index: lib/Support/Path.cpp
===================================================================
--- lib/Support/Path.cpp
+++ lib/Support/Path.cpp
@@ -707,12 +707,10 @@
for (StringRef C : llvm::make_range(path::begin(rel), path::end(rel))) {
if (C == ".")
continue;
- if (remove_dot_dot) {
- if (C == "..") {
- if (!components.empty())
- components.pop_back();
- continue;
- }
+ // Leading ".." will remain in the path.
+ if (remove_dot_dot && C == ".." && !components.empty()) {
+ components.pop_back();
+ continue;
}
components.push_back(C);
}
Index: include/llvm/Support/Path.h
===================================================================
--- include/llvm/Support/Path.h
+++ include/llvm/Support/Path.h
@@ -445,7 +445,8 @@
/// @brief In-place remove any './' and optionally '../' components from a path.
///
/// @param path processed path
-/// @param remove_dot_dot specify if '../' should be removed
+/// @param remove_dot_dot specify if '../' (except for leading "../") should be
+/// removed
/// @result True if path was changed
bool remove_dots(SmallVectorImpl<char> &path, bool remove_dot_dot = false);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25561.74515.patch
Type: text/x-patch
Size: 2038 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161013/205afeed/attachment.bin>
More information about the llvm-commits
mailing list