diff options
author | Jeff Hamilton <jham@android.com> | 2009-08-31 22:51:05 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-08-31 22:51:05 -0700 |
commit | db6e3c88e800f912f6b5709733fc477ff6e0c55d (patch) | |
tree | b8f3f7ede0a1d363ff65d67a0ab215543a5529fe /android | |
parent | 50db2efc4d4e41ddf4788a1d8e3eea352364639d (diff) | |
parent | 07a39f12058ddbc9bcf9200e4d5883e4f4b6fd95 (diff) | |
download | android_external_sqlite-db6e3c88e800f912f6b5709733fc477ff6e0c55d.tar.gz android_external_sqlite-db6e3c88e800f912f6b5709733fc477ff6e0c55d.tar.bz2 android_external_sqlite-db6e3c88e800f912f6b5709733fc477ff6e0c55d.zip |
am 07a39f12: Merge change 23409 into donut
Merge commit '07a39f12058ddbc9bcf9200e4d5883e4f4b6fd95' into eclair
* commit '07a39f12058ddbc9bcf9200e4d5883e4f4b6fd95':
Avoid a buffer overrun in GET_NORMALIZED_STRING.
Diffstat (limited to 'android')
-rw-r--r-- | android/PhoneticStringUtils.cpp | 6 | ||||
-rw-r--r-- | android/PhoneticStringUtilsTest.cpp | 11 |
2 files changed, 14 insertions, 3 deletions
diff --git a/android/PhoneticStringUtils.cpp b/android/PhoneticStringUtils.cpp index da5767f..cf85cb8 100644 --- a/android/PhoneticStringUtils.cpp +++ b/android/PhoneticStringUtils.cpp @@ -292,7 +292,7 @@ static bool GetExpectedString( src = STR_FOR_NULL_STR; } - char32_t codepoints[MAX_CODEPOINTS]; + char32_t codepoints[MAX_CODEPOINTS]; // if array size is changed the for loop needs to be changed size_t src_len = utf8_length(src); if (src_len == 0) { @@ -300,7 +300,7 @@ static bool GetExpectedString( } bool next_is_consumed; size_t j = 0; - for (size_t i = 0; i < src_len;) { + for (size_t i = 0; i < src_len && j < MAX_CODEPOINTS;) { int32_t ret = utf32_at(src, src_len, i, &i); if (ret < 0) { // failed to parse UTF-8 @@ -308,7 +308,7 @@ static bool GetExpectedString( } ret = get_codepoint_function( static_cast<char32_t>(ret), - i + 1 < src_len ? codepoints[i + 1] : 0, + i + 1 < src_len ? src[i + 1] : 0, &next_is_consumed); if (ret > 0) { codepoints[j] = static_cast<char32_t>(ret); diff --git a/android/PhoneticStringUtilsTest.cpp b/android/PhoneticStringUtilsTest.cpp index 356342e..9d06327 100644 --- a/android/PhoneticStringUtilsTest.cpp +++ b/android/PhoneticStringUtilsTest.cpp @@ -39,6 +39,7 @@ class TestExecutor { void testGetUtf8FromUtf32(); void testGetPhoneticallySortableString(); void testGetNormalizedString(); + void testLongString(); // Note: When adding a test, do not forget to add it to DoOneTest(). @@ -75,6 +76,7 @@ bool TestExecutor::DoAllTests() { DoOneTest(&TestExecutor::testGetUtf8FromUtf32); DoOneTest(&TestExecutor::testGetPhoneticallySortableString); DoOneTest(&TestExecutor::testGetNormalizedString); + DoOneTest(&TestExecutor::testLongString); printf("Test total: %d\nSuccess: %d\nFailure: %d\n", m_total_count, m_success_count, m_total_count - m_success_count); @@ -415,6 +417,15 @@ void TestExecutor::testGetNormalizedString() { EXPECT_EQ_UTF8_UTF8(" \t", " \t"); } +void TestExecutor::testLongString() { + printf("testLongString()\n"); + char * dst; + size_t len; + EXPECT_EQ_UTF8_UTF8("Qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqtttttttttttttttttttttttttttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "Qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqtttttttttttttttttttttttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggg"); +} + + int main() { TestExecutor executor; if(executor.DoAllTests()) { |