summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-02 19:30:02 +0000
committererikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-02 19:30:02 +0000
commiteae2a829891e7e8a186aa0ea6a4fbae8ea921b99 (patch)
tree6baafaa6444d618457f5b276082a28827621c9d0
parent1afaf2a5146c2652b0f8fc313fe14e9fa5776224 (diff)
downloadchromium_src-eae2a829891e7e8a186aa0ea6a4fbae8ea921b99.zip
chromium_src-eae2a829891e7e8a186aa0ea6a4fbae8ea921b99.tar.gz
chromium_src-eae2a829891e7e8a186aa0ea6a4fbae8ea921b99.tar.bz2
Fix a bug that could occur when converting strings with leading characters above 127.
BUG=None TEST=base_unittests --gtest_filter=*StringToInt* Review URL: http://codereview.chromium.org/4129012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64789 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/string_number_conversions.cc2
-rw-r--r--base/string_number_conversions_unittest.cc7
2 files changed, 8 insertions, 1 deletions
diff --git a/base/string_number_conversions.cc b/base/string_number_conversions.cc
index 488d807..76158de 100644
--- a/base/string_number_conversions.cc
+++ b/base/string_number_conversions.cc
@@ -143,7 +143,7 @@ template<typename CHAR> class WhitespaceHelper {
template<> class WhitespaceHelper<char> {
public:
static bool Invoke(char c) {
- return 0 != isspace(c);
+ return 0 != isspace(static_cast<unsigned char>(c));
}
};
diff --git a/base/string_number_conversions_unittest.cc b/base/string_number_conversions_unittest.cc
index 55487df..8cdd77d 100644
--- a/base/string_number_conversions_unittest.cc
+++ b/base/string_number_conversions_unittest.cc
@@ -80,6 +80,8 @@ TEST(StringNumberConversionsTest, StringToInt) {
} cases[] = {
{"0", 0, true},
{"42", 42, true},
+ {"42\x99", 42, false},
+ {"\x99" "42\x99", 0, false},
{"-2147483648", INT_MIN, true},
{"2147483647", INT_MAX, true},
{"", 0, false},
@@ -161,6 +163,11 @@ TEST(StringNumberConversionsTest, StringToInt) {
utf16_chars + utf16_input.length(),
&output));
EXPECT_EQ(6, output);
+
+ output = 0;
+ const char16 negative_wide_input[] = { 0xFF4D, '4', '2', 0};
+ EXPECT_FALSE(StringToInt(string16(negative_wide_input), &output));
+ EXPECT_EQ(0, output);
}
TEST(StringNumberConversionsTest, StringToInt64) {