diff options
author | Behdad Esfahbod <behdad@google.com> | 2014-07-25 14:49:27 -0400 |
---|---|---|
committer | Raph Levien <raph@google.com> | 2014-07-25 19:13:10 +0000 |
commit | b8208bc19c178b73175f76323381a1eeb8059807 (patch) | |
tree | ea5eac40675a203395e320c2b03e970a64fe5f1d /libs/minikin | |
parent | f0a1e5b2da5aaccbc1c010413365cd8c304cf5d9 (diff) | |
download | android_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
Diffstat (limited to 'libs/minikin')
-rw-r--r-- | libs/minikin/Layout.cpp | 7 |
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; |