Commit def60c00 authored by binji's avatar binji Committed by Commit bot

[NaCl SDK] nacl_io: Fix bug in Path::Range introduced in recent change.

Path("foo/bar") has 2 components "foo" and "bar". It is legal when calling
Path::Range to access an invalid component (e.g. Path("foo/bar").Range(2, 2).
In this case, the previous STL-based implementation would return "", but my
non-STL implementation was incorrectly returning "foo/bar".

BUG=none
R=sbc@chromium.org

Review URL: https://codereview.chromium.org/1018393007

Cr-Commit-Position: refs/heads/master@{#322035}
parent 13673b72
...@@ -170,7 +170,7 @@ std::string Path::Range(size_t start, size_t end) const { ...@@ -170,7 +170,7 @@ std::string Path::Range(size_t start, size_t end) const {
} }
} }
if (pstart > pend) if (slashes < start || pstart > pend)
return std::string(); return std::string();
return std::string(pstart, pend - pstart); return std::string(pstart, pend - pstart);
......
...@@ -70,6 +70,7 @@ TEST(PathTest, OnePart_Absolute) { ...@@ -70,6 +70,7 @@ TEST(PathTest, OnePart_Absolute) {
EXPECT_EQ("/", p.Range(0, 1)); EXPECT_EQ("/", p.Range(0, 1));
EXPECT_EQ("foo", p.Range(1, 2)); EXPECT_EQ("foo", p.Range(1, 2));
EXPECT_EQ("/foo", p.Range(0, 2)); EXPECT_EQ("/foo", p.Range(0, 2));
EXPECT_EQ("", p.Range(2, 2));
EXPECT_EQ("/", p.Parent().Join()); EXPECT_EQ("/", p.Parent().Join());
} }
...@@ -85,6 +86,7 @@ TEST(PathTest, TwoPart_Relative) { ...@@ -85,6 +86,7 @@ TEST(PathTest, TwoPart_Relative) {
EXPECT_EQ("foo", p.Range(0, 1)); EXPECT_EQ("foo", p.Range(0, 1));
EXPECT_EQ("bar", p.Range(1, 2)); EXPECT_EQ("bar", p.Range(1, 2));
EXPECT_EQ("foo/bar", p.Range(0, 2)); EXPECT_EQ("foo/bar", p.Range(0, 2));
EXPECT_EQ("", p.Range(2, 2));
EXPECT_EQ("foo", p.Parent().Join()); EXPECT_EQ("foo", p.Parent().Join());
} }
...@@ -185,6 +187,9 @@ TEST(PathTest, Range_Relative) { ...@@ -185,6 +187,9 @@ TEST(PathTest, Range_Relative) {
EXPECT_EQ("relative/path", p.Range(1, 3)); EXPECT_EQ("relative/path", p.Range(1, 3));
EXPECT_EQ("path", p.Range(2, 3)); EXPECT_EQ("path", p.Range(2, 3));
EXPECT_EQ("", p.Range(2, 100));
EXPECT_EQ("", p.Range(42, 67));
} }
TEST(PathTest, Range_Absolute) { TEST(PathTest, Range_Absolute) {
...@@ -203,6 +208,9 @@ TEST(PathTest, Range_Absolute) { ...@@ -203,6 +208,9 @@ TEST(PathTest, Range_Absolute) {
EXPECT_EQ("absolute/path", p.Range(2, 4)); EXPECT_EQ("absolute/path", p.Range(2, 4));
EXPECT_EQ("path", p.Range(3, 4)); EXPECT_EQ("path", p.Range(3, 4));
EXPECT_EQ("", p.Range(2, 100));
EXPECT_EQ("", p.Range(42, 67));
} }
TEST(PathTest, Assign) { TEST(PathTest, Assign) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment