summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@google.com>2014-07-25 14:49:27 -0400
committerRaph Levien <raph@google.com>2014-07-25 19:13:10 +0000
commitb8208bc19c178b73175f76323381a1eeb8059807 (patch)
treeea5eac40675a203395e320c2b03e970a64fe5f1d
parentf0a1e5b2da5aaccbc1c010413365cd8c304cf5d9 (diff)
downloadandroid_frameworks_minikin-b8208bc19c178b73175f76323381a1eeb8059807.tar.gz
android_frameworks_minikin-b8208bc19c178b73175f76323381a1eeb8059807.tar.bz2
android_frameworks_minikin-b8208bc19c178b73175f76323381a1eeb8059807.zip
Don't get stuck on invalid UTF-16
Replaces invalid unicode with replacement character U+FFFD and always makes forward progress. Bug: 15849380 Change-Id: Ic59ef6c64b0f5c4450bcae61597adcc269d6e7c5
-rw-r--r--libs/minikin/Layout.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp
index 0715c76..6b019d4 100644
--- a/libs/minikin/Layout.cpp
+++ b/libs/minikin/Layout.cpp
@@ -397,11 +397,10 @@ static hb_codepoint_t decodeUtf16(const uint16_t* chars, size_t len, ssize_t* it
const hb_codepoint_t delta = (0xd800 << 10) + 0xdc00 - 0x10000;
return (((hb_codepoint_t)v) << 10) + v2 - delta;
}
- (*iter) -= 2;
- return ~0u;
+ (*iter) -= 1;
+ return 0xFFFDu;
} else {
- (*iter)--;
- return ~0u;
+ return 0xFFFDu;
}
} else {
return v;