summaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorJeff Hamilton <jham@android.com>2009-08-31 22:51:05 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2009-08-31 22:51:05 -0700
commitdb6e3c88e800f912f6b5709733fc477ff6e0c55d (patch)
treeb8f3f7ede0a1d363ff65d67a0ab215543a5529fe /android
parent50db2efc4d4e41ddf4788a1d8e3eea352364639d (diff)
parent07a39f12058ddbc9bcf9200e4d5883e4f4b6fd95 (diff)
downloadandroid_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.cpp6
-rw-r--r--android/PhoneticStringUtilsTest.cpp11
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()) {