From b1d76c87f1ea2462e0bb54018151609e94dd0718 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 8 Oct 2015 10:25:42 +0200 Subject: [PATCH] Test crash scenario due to Unicode emoji characters (sqlcipher/android-database-sqlcipher#199) --- .../java/net/zetetic/tests/UnicodeTest.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/zetetic/tests/UnicodeTest.java b/src/main/java/net/zetetic/tests/UnicodeTest.java index 567d297..a08f0dc 100644 --- a/src/main/java/net/zetetic/tests/UnicodeTest.java +++ b/src/main/java/net/zetetic/tests/UnicodeTest.java @@ -2,20 +2,32 @@ import android.database.Cursor; import net.sqlcipher.database.SQLiteDatabase; +import net.sqlcipher.database.SQLiteStatement; public class UnicodeTest extends SQLCipherTest { @Override public boolean execute(SQLiteDatabase database) { - String expected = "КАКОЙ-ТО КИРИЛЛИЧЕСКИЙ ТЕКСТ"; // SOME Cyrillic TEXT String actual = ""; + Cursor result = database.rawQuery("select UPPER('Какой-то кириллический текст') as u1", new String[]{}); - if(result != null){ + if (result != null) { result.moveToFirst(); actual = result.getString(0); result.close(); } - return actual.equals(expected); + if (!actual.equals(expected)) return false; + + if (android.os.Build.VERSION.SDK_INT >= 23) { // Android M + // This will crash on Android releases 1.X-5.X due the following Android bug: + // https://code.google.com/p/android/issues/detail?id=81341 + SQLiteStatement st = database.compileStatement("SELECT '\uD83D\uDE03'"); // SMILING FACE (MOUTH OPEN) + String res = st.simpleQueryForString(); + if (!res.equals("\uD83D\uDE03")) return false; + } + + // all ok: + return true; } @Override