<pre style='margin:0'>
Leonardo Brondani Schenkel (lbschenkel) pushed a commit to branch icu
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/0c47ec4d30dc02c085dd851262cf2fcbbb0b1521">https://github.com/macports/macports-ports/commit/0c47ec4d30dc02c085dd851262cf2fcbbb0b1521</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 0c47ec4d30dc02c085dd851262cf2fcbbb0b1521
</span>Author: Leonardo Brondani Schenkel <lbschenkel@macports.org>
AuthorDate: Mon Apr 23 15:36:11 2018 +0200

<span style='display:block; white-space:pre;color:#404040;'>    icu: update to 61.1
</span>---
 devel/icu/Portfile                                |  16 +--
 devel/icu/files/CVE-2017-14952.patch              |  12 --
 devel/icu/files/CVE-2017-7867-CVE-2017-7868.patch | 156 ----------------------
 3 files changed, 8 insertions(+), 176 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/icu/Portfile b/devel/icu/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 308b564..a44341b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/icu/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/icu/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -8,7 +8,7 @@ set my_name     icu4c
</span> # whenever the library version number changes. Thanks.
 # To find dependencies, use:
 # port file all | sort -u | xargs grep -El ':icu( |$)' | rev | cut -d / -f 2 | rev | sort -u
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version                     58.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version                     61.1
</span> # Don't update to 59 or later because they require C++11
 categories      devel textproc
 platforms       darwin freebsd
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -29,8 +29,9 @@ master_sites    http://download.icu-project.org/files/${my_name}/${version}/
</span> distname        ${my_name}-[join [split ${version} .] _]
 extract.suffix              .tgz
 distfiles                   ${distname}-src${extract.suffix}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums                   rmd160  df06e7b18a87e383d3762564f2e9a59fd75865f9 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            sha256  2b0a4410153a9b20de0e20c7d8b66049a72aef244b53683d0d7521371683da0c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums                   rmd160  50560a899c9c55eb033f86fb7fc56a3db28f2b87 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  d007f89ae8a2543a53525c74359b65b36412fa84b3349f1400be6dcf409fafef \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    23400587
</span> 
 worksrcdir      ${name}/source
 set docdir      ${prefix}/share/doc/${name}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,9 +49,10 @@ subport ${name}-docs {
</span>     long_description-append Documentation.
     
     use_zip             yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    distfiles               ${distname}-docs${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    checksums               rmd160  64c9385c43f994d283a38980c77638dc061bfe84 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            sha256  dc17983debc1f23f1bd1ac1ba053f2df5b07858f5af9bd48eeb3b8044c8d3146
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles           ${distname}-docs${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums           rmd160  a820dd95329929acd8030b82698d0116f0e546f9 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256  62bb6b1bee62472a1e3a0ee0b58c19b4bd24bed278d328db985075b65851dd2a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        size    7270472
</span> 
     extract.dir         ${worksrcpath}/doc/html
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -103,8 +105,6 @@ if { ${subport} ne "${name}-docs" } {
</span>     }
     
     patchfiles-append   patch-config-mh-darwin.diff
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    patchfiles-append   CVE-2017-7867-CVE-2017-7868.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    patchfiles-append   CVE-2017-14952.patch
</span>     
     # ICU has three mechanisms to aid other projects in building properly
     #     1) .pc files for pkg-config
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/icu/files/CVE-2017-14952.patch b/devel/icu/files/CVE-2017-14952.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 7e6abc9..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/icu/files/CVE-2017-14952.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,12 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14952
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-http://bugs.icu-project.org/trac/changeset/40324
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- i18n/zonemeta.cpp.orig 2016-06-15 18:58:17.000000000 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ i18n/zonemeta.cpp      2017-10-24 01:32:39.000000000 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -683,7 +683,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     mzMappings = new UVector(deleteOlsonToMetaMappingEntry, NULL, status);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     if (U_FAILURE(status)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         delete mzMappings;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                        deleteOlsonToMetaMappingEntry(entry);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         uprv_free(entry);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/icu/files/CVE-2017-7867-CVE-2017-7868.patch b/devel/icu/files/CVE-2017-7867-CVE-2017-7868.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 335d4a5..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/icu/files/CVE-2017-7867-CVE-2017-7868.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,156 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-https://nvd.nist.gov/vuln/detail/CVE-2017-7867
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-https://nvd.nist.gov/vuln/detail/CVE-2017-7868
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-http://bugs.icu-project.org/trac/ticket/12888
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-http://bugs.icu-project.org/trac/changeset/39671
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- common/utext.cpp.orig  2016-06-15 13:58:17.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ common/utext.cpp       2017-05-25 21:51:47.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -848,9 +848,16 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Chunk size.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--//     Must be less than 85, because of byte mapping from UChar indexes to native indexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--//     Worst case is three native bytes to one UChar.  (Supplemenaries are 4 native bytes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--//     to two UChars.)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//     Must be less than 42  (256/6), because of byte mapping from UChar indexes to native indexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//     Worst case there are six UTF-8 bytes per UChar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//         obsolete 6 byte form fd + 5 trails maps to fffd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//         obsolete 5 byte form fc + 4 trails maps to fffd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//         non-shortest 4 byte forms maps to fffd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//         normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//     mapToUChars array size must allow for the worst case, 6.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//     This could be brought down to 4, by treating fd and fc as pure illegal,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//     rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- enum { UTF8_TEXT_CHUNK_SIZE=32 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+enum { SIZEOF_MAPTOUCHARS=UTF8_TEXT_CHUNK_SIZE*6+6 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -890,5 +897,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                                      //    one for a supplementary starting in the last normal position,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                                      //    and one for an entry for the buffer limit position.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    uint8_t   mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    uint8_t   mapToUChars[SIZEOF_MAPTOUCHARS];       // Map native offset from bufNativeStart to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                                      //   correspoding offset in filled part of buf.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     int32_t   align;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1033,4 +1040,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             u8b = (UTF8Buf *)ut->p;   // the current buffer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             mapIndex = ix - u8b->toUCharsMapStart;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            U_ASSERT(mapIndex < (int32_t)SIZEOF_MAPTOUCHARS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             return TRUE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1299,4 +1307,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         //   If index is at the end, there is no character there to look at.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if (ix != ut->b) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            // Note: this function will only move the index back if it is on a trail byte
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            //       and there is a preceding lead byte and the sequence from the lead 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            //       through this trail could be part of a valid UTF-8 sequence
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            //       Otherwise the index remains unchanged.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             U8_SET_CP_START(s8, 0, ix);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1312,5 +1324,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         uint8_t *mapToNative = u8b->mapToNative;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         uint8_t *mapToUChars = u8b->mapToUChars;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        int32_t  toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        int32_t  toUCharsMapStart = ix - SIZEOF_MAPTOUCHARS + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        // Note that toUCharsMapStart can be negative. Happens when the remaining
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        // text from current position to the beginning is less than the buffer size.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         int32_t  destIx = UTF8_TEXT_CHUNK_SIZE+2;   // Start in the overflow region
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                                     //   at end of buffer to leave room
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1339,4 +1354,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 // Special case ASCII range for speed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 buf[destIx] = (UChar)c;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                U_ASSERT(toUCharsMapStart <= srcIx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1368,4 +1384,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 } while (sIx >= srcIx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                U_ASSERT(toUCharsMapStart <= (srcIx+1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 // Set native indexing limit to be the current position.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1542,4 +1559,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     U_ASSERT(index<=ut->chunkNativeLimit);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     int32_t mapIndex = index - u8b->toUCharsMapStart;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    U_ASSERT(mapIndex < (int32_t)SIZEOF_MAPTOUCHARS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     U_ASSERT(offset>=0 && offset<=ut->chunkLength);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/intltest/utxttest.cpp     (revision 39670)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/intltest/utxttest.cpp     (revision 39671)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -68,4 +68,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         case 7: name = "Ticket12130";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if (exec) Ticket12130(); break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        case 8: name = "Ticket12888";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if (exec) Ticket12888(); break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         default: name = "";          break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1584,2 +1586,62 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     utext_close(&ut);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Ticket 12888: bad handling of illegal utf-8 containing many instances of the archaic, now illegal,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//               six byte utf-8 forms. Original implementation had an assumption that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//               there would be at most three utf-8 bytes per UTF-16 code unit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//               The five and six byte sequences map to a single replacement character.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void UTextTest::Ticket12888() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    const char *badString = 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    UErrorCode status = U_ZERO_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    LocalUTextPointer ut(utext_openUTF8(NULL, badString, -1, &status));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    TEST_SUCCESS(status);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (;;) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        UChar32 c = utext_next32(ut.getAlias());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (c == U_SENTINEL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int32_t endIdx = utext_getNativeIndex(ut.getAlias());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (endIdx != (int32_t)strlen(badString)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        errln("%s:%d expected=%d, actual=%d", __FILE__, __LINE__, strlen(badString), endIdx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (int32_t prevIndex = endIdx; prevIndex>0;) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        UChar32 c = utext_previous32(ut.getAlias());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        int32_t currentIndex = utext_getNativeIndex(ut.getAlias());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (c != 0xfffd) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            errln("%s:%d (expected, actual, index) = (%d, %d, %d)\n",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    __FILE__, __LINE__, 0xfffd, c, currentIndex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (currentIndex != prevIndex - 6) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            errln("%s:%d: wrong index. Expected, actual = %d, %d",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    __FILE__, __LINE__, prevIndex - 6, currentIndex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        prevIndex = currentIndex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/intltest/utxttest.h       (revision 39670)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/intltest/utxttest.h       (revision 39671)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -39,4 +39,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     void Ticket10983();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     void Ticket12130();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    void Ticket12888();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- private:
</span></pre><pre style='margin:0'>

</pre>