Allow trailing slashes in --proto_path mappings.

Patch by Kevin Ko <kevin.s.ko@gmail.com>.
This commit is contained in:
temporal 2008-07-16 20:57:56 +00:00
parent 928ebb6b55
commit e773b43253
3 changed files with 19 additions and 1 deletions

View File

@ -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>

View File

@ -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;

View File

@ -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