diff options
author | binji <binji@chromium.org> | 2015-03-24 11:43:32 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-24 18:44:31 +0000 |
commit | def60c001d10a9d70b7b8b4d8f8143a88bad81f5 (patch) | |
tree | 11a2ba83c97a01c5135e58bfbe43b70d86740a87 /native_client_sdk | |
parent | 13673b729eb5a91e90dbcf68db860d5119bb8af5 (diff) | |
download | chromium_src-def60c001d10a9d70b7b8b4d8f8143a88bad81f5.zip chromium_src-def60c001d10a9d70b7b8b4d8f8143a88bad81f5.tar.gz chromium_src-def60c001d10a9d70b7b8b4d8f8143a88bad81f5.tar.bz2 |
[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}
Diffstat (limited to 'native_client_sdk')
-rw-r--r-- | native_client_sdk/src/libraries/nacl_io/path.cc | 2 | ||||
-rw-r--r-- | native_client_sdk/src/tests/nacl_io_test/path_test.cc | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/native_client_sdk/src/libraries/nacl_io/path.cc b/native_client_sdk/src/libraries/nacl_io/path.cc index 2196560..e75f068 100644 --- a/native_client_sdk/src/libraries/nacl_io/path.cc +++ b/native_client_sdk/src/libraries/nacl_io/path.cc @@ -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(pstart, pend - pstart); diff --git a/native_client_sdk/src/tests/nacl_io_test/path_test.cc b/native_client_sdk/src/tests/nacl_io_test/path_test.cc index b7b82cc..7716067 100644 --- a/native_client_sdk/src/tests/nacl_io_test/path_test.cc +++ b/native_client_sdk/src/tests/nacl_io_test/path_test.cc @@ -70,6 +70,7 @@ TEST(PathTest, OnePart_Absolute) { EXPECT_EQ("/", p.Range(0, 1)); EXPECT_EQ("foo", p.Range(1, 2)); EXPECT_EQ("/foo", p.Range(0, 2)); + EXPECT_EQ("", p.Range(2, 2)); EXPECT_EQ("/", p.Parent().Join()); } @@ -85,6 +86,7 @@ TEST(PathTest, TwoPart_Relative) { EXPECT_EQ("foo", p.Range(0, 1)); EXPECT_EQ("bar", p.Range(1, 2)); EXPECT_EQ("foo/bar", p.Range(0, 2)); + EXPECT_EQ("", p.Range(2, 2)); EXPECT_EQ("foo", p.Parent().Join()); } @@ -185,6 +187,9 @@ TEST(PathTest, Range_Relative) { EXPECT_EQ("relative/path", p.Range(1, 3)); EXPECT_EQ("path", p.Range(2, 3)); + + EXPECT_EQ("", p.Range(2, 100)); + EXPECT_EQ("", p.Range(42, 67)); } TEST(PathTest, Range_Absolute) { @@ -203,6 +208,9 @@ TEST(PathTest, Range_Absolute) { EXPECT_EQ("absolute/path", p.Range(2, 4)); EXPECT_EQ("path", p.Range(3, 4)); + + EXPECT_EQ("", p.Range(2, 100)); + EXPECT_EQ("", p.Range(42, 67)); } TEST(PathTest, Assign) { |