From 27adea867ddb6ef197764b368fbdf49b14fe6c25 Mon Sep 17 00:00:00 2001 From: Fyodor Kupolov Date: Wed, 18 Oct 2017 15:03:21 -0700 Subject: [PATCH] Throw clear error if a row doesn't fit into CursorWindow Test: android.database.sqlite.cts.SQLiteCursorTest Bug: 66946862 Change-Id: I0b3c7c8c0a4aac2f4b024c579b482cebe79231c0 --- core/jni/android_database_SQLiteConnection.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp index c3f9bf7f25bf1..1efff7f8b0fbe 100644 --- a/core/jni/android_database_SQLiteConnection.cpp +++ b/core/jni/android_database_SQLiteConnection.cpp @@ -765,6 +765,14 @@ static jlong nativeExecuteForCursorWindow(JNIEnv* env, jclass clazz, if (startPos > totalRows) { ALOGE("startPos %d > actual rows %d", startPos, totalRows); } + if (totalRows > 0 && addedRows == 0) { + String8 msg; + msg.appendFormat("Row too big to fit into CursorWindow requiredPos=%d, totalRows=%d", + requiredPos, totalRows); + throw_sqlite3_exception(env, SQLITE_TOOBIG, NULL, msg.string()); + return 0; + } + jlong result = jlong(startPos) << 32 | jlong(totalRows); return result; }