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:
|
Maven packaging:
|
||||||
Gregory Kick <gak@google.com>
|
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,
|
// Not an exact match. Is the next character a '/'? Otherwise,
|
||||||
// this isn't actually a match at all. E.g. the prefix "foo/bar"
|
// this isn't actually a match at all. E.g. the prefix "foo/bar"
|
||||||
// does not match the filename "foo/barbaz".
|
// does not match the filename "foo/barbaz".
|
||||||
|
int after_prefix_start = -1;
|
||||||
if (filename[old_prefix.size()] == '/') {
|
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
|
// Yep. So the prefixes are directories and the filename is a file
|
||||||
// inside them.
|
// inside them.
|
||||||
string after_prefix = filename.substr(old_prefix.size() + 1);
|
string after_prefix = filename.substr(after_prefix_start);
|
||||||
if (ContainsParentReference(after_prefix)) {
|
if (ContainsParentReference(after_prefix)) {
|
||||||
// We do not allow the file name to use "..".
|
// We do not allow the file name to use "..".
|
||||||
return false;
|
return false;
|
||||||
|
@ -492,6 +492,7 @@ TEST_F(DiskSourceTreeTest, DiskFileToVirtualFileCanonicalization) {
|
|||||||
source_tree_.MapPath("dir3", "./foo/bar/.");
|
source_tree_.MapPath("dir3", "./foo/bar/.");
|
||||||
source_tree_.MapPath("dir4", ".");
|
source_tree_.MapPath("dir4", ".");
|
||||||
source_tree_.MapPath("", "/qux");
|
source_tree_.MapPath("", "/qux");
|
||||||
|
source_tree_.MapPath("dir5", "/quux/");
|
||||||
|
|
||||||
string virtual_file;
|
string virtual_file;
|
||||||
string shadowing_disk_file;
|
string shadowing_disk_file;
|
||||||
@ -530,6 +531,12 @@ TEST_F(DiskSourceTreeTest, DiskFileToVirtualFileCanonicalization) {
|
|||||||
source_tree_.DiskFileToVirtualFile(
|
source_tree_.DiskFileToVirtualFile(
|
||||||
"/qux/baz", &virtual_file, &shadowing_disk_file));
|
"/qux/baz", &virtual_file, &shadowing_disk_file));
|
||||||
EXPECT_EQ("baz", virtual_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
|
} // namespace
|
||||||
|
Loading…
Reference in New Issue
Block a user