summaryrefslogtreecommitdiffstats
path: root/native_client_sdk
diff options
context:
space:
mode:
authorbinji <binji@chromium.org>2015-03-24 11:43:32 -0700
committerCommit bot <commit-bot@chromium.org>2015-03-24 18:44:31 +0000
commitdef60c001d10a9d70b7b8b4d8f8143a88bad81f5 (patch)
tree11a2ba83c97a01c5135e58bfbe43b70d86740a87 /native_client_sdk
parent13673b729eb5a91e90dbcf68db860d5119bb8af5 (diff)
downloadchromium_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.cc2
-rw-r--r--native_client_sdk/src/tests/nacl_io_test/path_test.cc8
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) {