aboutsummaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
authorjshin@chromium.org <jshin@chromium.org>2014-11-26 18:31:18 +0000
committerjshin@chromium.org <jshin@chromium.org>2014-11-26 18:31:18 +0000
commit866ff696e9022a6000afbab516fba62cfa306075 (patch)
tree4d552cd212ce1880b4a205c0ad6475fd4b9b1fd2 /patches
parentdd727641e190d60e4593bcb3a35c7f51eb4925c5 (diff)
downloadicu-866ff696e9022a6000afbab516fba62cfa306075.tar.gz
Apply a local patch to ucol.cpp
BUG=433866 TEST=See the bug. R=mbarbella@google.com Review URL: https://codereview.chromium.org/751333003 git-svn-id: http://src.chromium.org/svn/trunk/deps/third_party/icu52@293126 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
Diffstat (limited to 'patches')
-rw-r--r--patches/col.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/patches/col.patch b/patches/col.patch
new file mode 100644
index 0000000..aa117fe
--- /dev/null
+++ b/patches/col.patch
@@ -0,0 +1,29 @@
+Index: source/i18n/ucol.cpp
+===================================================================
+--- source/i18n/ucol.cpp (revision 292709)
++++ source/i18n/ucol.cpp (working copy)
+@@ -2259,6 +2259,9 @@
+ if (data->pos + 1 == data->endp) {
+ return *(data->pos ++);
+ }
++ if (data->pos >= data->endp) {
++ return (UChar) -1; // return U+FFFF (non-char) to indicate an error
++ }
+ }
+ else {
+ if (innormbuf) {
+@@ -2821,7 +2824,13 @@
+ }
+ }
+ } else if (U16_IS_LEAD(schar)) {
+- miss = U16_GET_SUPPLEMENTARY(schar, getNextNormalizedChar(source));
++ UChar nextChar = getNextNormalizedChar(source);
++ const UChar* prevPos = source->pos;
++ if (U16_IS_TRAIL(nextChar)) {
++ miss = U16_GET_SUPPLEMENTARY(schar, nextChar);
++ } else if (prevPos < source->pos) {
++ goBackOne(source);
++ }
+ }
+
+ uint8_t sCC;