summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kunal Malhotra <malhk@google.com> 2023-07-28 01:58:02 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-07-28 01:58:02 +0000
commitceacb727a481565e77a0ccf79daa0193b70397e0 (patch)
treea9361823ed204cfed8b159cf953db4dba2a5ed8d
parent7d2065df8a315a4def4b4c210f40b721f928ae4d (diff)
parent2b3e7ada29a1a444f8e64b133f838277a1db9ace (diff)
Merge "Fixing DatabaseUtils to detect malformed UTF-16 strings" into rvc-dev am: 0dcc5c6eb5 am: 799e127b0b am: ddc2eb9d24 am: 16658a145e am: 2b3e7ada29
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24057913 Change-Id: Ibae9f4593ce4fb917584f3fd503f82ac457c4b7f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--core/java/android/database/DatabaseUtils.java32
1 files changed, 23 insertions, 9 deletions
diff --git a/core/java/android/database/DatabaseUtils.java b/core/java/android/database/DatabaseUtils.java
index 6c8a8500e4e3..d41df4f49d48 100644
--- a/core/java/android/database/DatabaseUtils.java
+++ b/core/java/android/database/DatabaseUtils.java
@@ -511,17 +511,31 @@ public class DatabaseUtils {
*/
public static void appendEscapedSQLString(StringBuilder sb, String sqlString) {
sb.append('\'');
- if (sqlString.indexOf('\'') != -1) {
- int length = sqlString.length();
- for (int i = 0; i < length; i++) {
- char c = sqlString.charAt(i);
- if (c == '\'') {
- sb.append('\'');
+ int length = sqlString.length();
+ for (int i = 0; i < length; i++) {
+ char c = sqlString.charAt(i);
+ if (Character.isHighSurrogate(c)) {
+ if (i == length - 1) {
+ continue;
+ }
+ if (Character.isLowSurrogate(sqlString.charAt(i + 1))) {
+ // add them both
+ sb.append(c);
+ sb.append(sqlString.charAt(i + 1));
+ continue;
+ } else {
+ // this is a lone surrogate, skip it
+ continue;
}
- sb.append(c);
}
- } else
- sb.append(sqlString);
+ if (Character.isLowSurrogate(c)) {
+ continue;
+ }
+ if (c == '\'') {
+ sb.append('\'');
+ }
+ sb.append(c);
+ }
sb.append('\'');
}