Allow trailing slashes in --proto_path mappings.
Patch by Kevin Ko <kevin.s.ko@gmail.com>.
This commit is contained in:
parent
928ebb6b55
commit
e773b43253
@ -33,3 +33,6 @@ Documentation:
|
||||
|
||||
Maven packaging:
|
||||
Gregory Kick <gak@google.com>
|
||||
|
||||
Non-Google patch contributors:
|
||||
Kevin Ko <kevin.s.ko@gmail.com>
|
||||
|
@ -280,10 +280,18 @@ static bool ApplyMapping(const string& filename,
|
||||
// Not an exact match. Is the next character a '/'? Otherwise,
|
||||
// this isn't actually a match at all. E.g. the prefix "foo/bar"
|
||||
// does not match the filename "foo/barbaz".
|
||||
int after_prefix_start = -1;
|
||||
if (filename[old_prefix.size()] == '/') {
|
||||
after_prefix_start = old_prefix.size() + 1;
|
||||
} else if (filename[old_prefix.size() - 1] == '/') {
|
||||
// old_prefix is never empty, and canonicalized paths never have
|
||||
// consecutive '/' characters.
|
||||
after_prefix_start = old_prefix.size();
|
||||
}
|
||||
if (after_prefix_start != -1) {
|
||||
// Yep. So the prefixes are directories and the filename is a file
|
||||
// inside them.
|
||||
string after_prefix = filename.substr(old_prefix.size() + 1);
|
||||
string after_prefix = filename.substr(after_prefix_start);
|
||||
if (ContainsParentReference(after_prefix)) {
|
||||
// We do not allow the file name to use "..".
|
||||
return false;
|
||||
|
@ -492,6 +492,7 @@ TEST_F(DiskSourceTreeTest, DiskFileToVirtualFileCanonicalization) {
|
||||
source_tree_.MapPath("dir3", "./foo/bar/.");
|
||||
source_tree_.MapPath("dir4", ".");
|
||||
source_tree_.MapPath("", "/qux");
|
||||
source_tree_.MapPath("dir5", "/quux/");
|
||||
|
||||
string virtual_file;
|
||||
string shadowing_disk_file;
|
||||
@ -530,6 +531,12 @@ TEST_F(DiskSourceTreeTest, DiskFileToVirtualFileCanonicalization) {
|
||||
source_tree_.DiskFileToVirtualFile(
|
||||
"/qux/baz", &virtual_file, &shadowing_disk_file));
|
||||
EXPECT_EQ("baz", virtual_file);
|
||||
|
||||
// "/quux/bar" is under "/quux".
|
||||
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
||||
source_tree_.DiskFileToVirtualFile(
|
||||
"/quux/bar", &virtual_file, &shadowing_disk_file));
|
||||
EXPECT_EQ("dir5/bar", virtual_file);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
Loading…
Reference in New Issue
Block a user