aboutsummaryrefslogtreecommitdiffstats
path: root/devel/icu
diff options
context:
space:
mode:
authorJan Beich <jbeich@FreeBSD.org>2017-09-25 08:02:36 +0800
committerJan Beich <jbeich@FreeBSD.org>2017-09-25 08:02:36 +0800
commita38219861723215d3c7d044cc973c09fd60c0646 (patch)
tree5591751f79396196499fbf2ae1ebbbdb4567d10f /devel/icu
parent635a77adac0851653822796a29095500d1ee461e (diff)
downloadfreebsd-ports-gnome-a38219861723215d3c7d044cc973c09fd60c0646.tar.gz
freebsd-ports-gnome-a38219861723215d3c7d044cc973c09fd60c0646.tar.zst
freebsd-ports-gnome-a38219861723215d3c7d044cc973c09fd60c0646.zip
devel/icu: update to 59.1
- Temporarily keep C++98 working in consumers for Clang's default -std= Changes: http://site.icu-project.org/download/59 PR: 218788 Submitted by: takefu@airport.fm, dcarmich@dcarmichael.net (early version) Exp-run by: antoine
Diffstat (limited to 'devel/icu')
-rw-r--r--devel/icu/Makefile6
-rw-r--r--devel/icu/distinfo6
-rw-r--r--devel/icu/files/patch-common_unicode_platform.h22
-rw-r--r--devel/icu/files/patch-common_unicode_umachine.h11
-rw-r--r--devel/icu/files/patch-common_unicode_unistr.h33
-rw-r--r--devel/icu/files/patch-common_unicode_uvernum.h8
-rw-r--r--devel/icu/files/patch-r39484148
-rw-r--r--devel/icu/files/patch-r39671176
-rw-r--r--devel/icu/pkg-plist4
9 files changed, 82 insertions, 332 deletions
diff --git a/devel/icu/Makefile b/devel/icu/Makefile
index 01dc3f09539e..707944ac2681 100644
--- a/devel/icu/Makefile
+++ b/devel/icu/Makefile
@@ -2,8 +2,8 @@
# $FreeBSD$
PORTNAME= icu
-DISTVERSION= 58_2
-PORTREVISION?= 3 # keep for icu-lx
+DISTVERSION= 59_1
+PORTREVISION?= 0 # keep for icu-lx
PORTEPOCH?= 1
CATEGORIES?= devel
MASTER_SITES= http://download.icu-project.org/files/icu4c/${PORTVERSION}/
@@ -26,7 +26,7 @@ CONFIGURE_ARGS+=--with-data-packaging=archive \
CPPFLAGS+= -DICU_NO_USER_DATA_OVERRIDE
MAKE_ARGS= VERBOSE=1
TEST_TARGET= check
-USES+= compiler:c++0x gmake pathfix tar:tgz
+USES+= compiler:c++11-lib gmake pathfix tar:tgz
USE_LDCONFIG= yes
WRKSRC= ${WRKDIR}/icu/source
diff --git a/devel/icu/distinfo b/devel/icu/distinfo
index e1dd826fa950..28ae3f263b83 100644
--- a/devel/icu/distinfo
+++ b/devel/icu/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1481218489
-SHA256 (icu4c-58_2-src.tgz) = 2b0a4410153a9b20de0e20c7d8b66049a72aef244b53683d0d7521371683da0c
-SIZE (icu4c-58_2-src.tgz) = 23369902
+TIMESTAMP = 1491550830
+SHA256 (icu4c-59_1-src.tgz) = 7132fdaf9379429d004005217f10e00b7d2319d0fea22bdfddef8991c45b75fe
+SIZE (icu4c-59_1-src.tgz) = 22706578
diff --git a/devel/icu/files/patch-common_unicode_platform.h b/devel/icu/files/patch-common_unicode_platform.h
index 895bb50e3de0..60c8a8446aa2 100644
--- a/devel/icu/files/patch-common_unicode_platform.h
+++ b/devel/icu/files/patch-common_unicode_platform.h
@@ -1,6 +1,6 @@
---- common/unicode/platform.h.orig 2016-03-23 20:49:58 UTC
+--- common/unicode/platform.h.orig 2017-03-22 19:06:26 UTC
+++ common/unicode/platform.h
-@@ -379,8 +379,8 @@
+@@ -382,8 +382,8 @@
*/
#ifdef U_IS_BIG_ENDIAN
/* Use the predefined value. */
@@ -11,3 +11,21 @@
#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)
/* gcc */
# define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+@@ -498,11 +498,15 @@
+ # define U_CPLUSPLUS_VERSION 1
+ #endif
+
+-#if (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11)
++#if defined(__cplusplus) && (U_CPLUSPLUS_VERSION < 11)
+ // add in std::nullptr_t
+ namespace std {
++#if (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390)
+ typedef decltype(nullptr) nullptr_t;
+-};
++#elif defined(__GNUC__) && !defined(__clang__)
++ typedef __decltype(__null) nullptr_t;
++#endif
++}
+ #endif
+
+ /**
diff --git a/devel/icu/files/patch-common_unicode_umachine.h b/devel/icu/files/patch-common_unicode_umachine.h
new file mode 100644
index 000000000000..b5495e6df585
--- /dev/null
+++ b/devel/icu/files/patch-common_unicode_umachine.h
@@ -0,0 +1,11 @@
+--- common/unicode/umachine.h.orig 2017-03-16 19:01:12 UTC
++++ common/unicode/umachine.h
+@@ -295,7 +295,7 @@ typedef int8_t UBool;
+ * If 1, then char16_t is a typedef and not a real type (yet)
+ * @internal
+ */
+-#if (U_PLATFORM == U_PF_AIX) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11)
++#if defined(__cplusplus) && (U_CPLUSPLUS_VERSION < 11)
+ // for AIX, uchar.h needs to be included
+ # include <uchar.h>
+ # define U_CHAR16_IS_TYPEDEF 1
diff --git a/devel/icu/files/patch-common_unicode_unistr.h b/devel/icu/files/patch-common_unicode_unistr.h
new file mode 100644
index 000000000000..334f3633af18
--- /dev/null
+++ b/devel/icu/files/patch-common_unicode_unistr.h
@@ -0,0 +1,33 @@
+--- common/unicode/unistr.h.orig 2017-03-29 04:44:37 UTC
++++ common/unicode/unistr.h
+@@ -117,12 +117,20 @@ class UnicodeStringAppendable; // unicode/appendable.
+ * The string parameter must be a C string literal.
+ * The length of the string, not including the terminating
+ * <code>NUL</code>, must be specified as a constant.
++ * The U_STRING_DECL macro should be invoked exactly once for one
++ * such string variable before it is used.
+ * @stable ICU 2.0
+ */
+ #if !U_CHAR16_IS_TYPEDEF
+ # define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, u ## cs, _length)
++#elif defined(U_DECLARE_UTF16)
++# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t *)U_DECLARE_UTF16(cs), _length)
++#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
++# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t *)L ## cs, _length)
++#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY
++# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t *)cs, _length)
+ #else
+-# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t*)u ## cs, _length)
++# define UNICODE_STRING(cs, _length) icu::UnicodeString(cs, _length, US_INV)
+ #endif
+
+ /**
+@@ -3985,7 +3993,7 @@ UnicodeString::isBufferWritable() const
+ inline const char16_t *
+ UnicodeString::getBuffer() const {
+ if(fUnion.fFields.fLengthAndFlags&(kIsBogus|kOpenGetBuffer)) {
+- return nullptr;
++ return NULL;
+ } else if(fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) {
+ return fUnion.fStackFields.fBuffer;
+ } else {
diff --git a/devel/icu/files/patch-common_unicode_uvernum.h b/devel/icu/files/patch-common_unicode_uvernum.h
new file mode 100644
index 000000000000..21af34231d25
--- /dev/null
+++ b/devel/icu/files/patch-common_unicode_uvernum.h
@@ -0,0 +1,8 @@
+--- common/unicode/uvernum.h.orig 2017-03-21 01:03:49 UTC
++++ common/unicode/uvernum.h
+@@ -125,4 +125,4 @@
+ * This value will change in the subsequent releases of ICU
+ * @stable ICU 2.6
+ */
+-#if U_PLATFORM_HAS_WINUWP_API == 0
++#ifndef U_PLATFORM_HAS_WINUWP_API
diff --git a/devel/icu/files/patch-r39484 b/devel/icu/files/patch-r39484
deleted file mode 100644
index 9a2ffabbebe6..000000000000
--- a/devel/icu/files/patch-r39484
+++ /dev/null
@@ -1,148 +0,0 @@
-https://ssl.icu-project.org/trac/ticket/12827
-
-Index: test/intltest/apicoll.h
-===================================================================
---- test/intltest/apicoll.h (revision 39483)
-+++ test/intltest/apicoll.h (revision 39484)
-@@ -35,6 +35,7 @@ class CollationAPITest: public IntlTestCollator {
- * - displayable name in the desired locale
- */
- void TestProperty(/* char* par */);
-+ void TestKeywordValues();
-
- /**
- * This tests the RuleBasedCollator
-Index: test/intltest/apicoll.cpp
-===================================================================
---- test/intltest/apicoll.cpp (revision 39483)
-+++ test/intltest/apicoll.cpp (revision 39484)
-@@ -81,17 +81,10 @@ CollationAPITest::TestProperty(/* char* par */)
- logln("Test ctors : ");
- col = Collator::createInstance(Locale::getEnglish(), success);
- if (U_FAILURE(success)){
-- errcheckln(success, "Default Collator creation failed. - %s", u_errorName(success));
-+ errcheckln(success, "English Collator creation failed. - %s", u_errorName(success));
- return;
- }
-
-- StringEnumeration* kwEnum = col->getKeywordValuesForLocale("", Locale::getEnglish(),true,success);
-- if (U_FAILURE(success)){
-- errcheckln(success, "Get Keyword Values for Locale failed. - %s", u_errorName(success));
-- return;
-- }
-- delete kwEnum;
--
- col->getVersion(versionArray);
- // Check for a version greater than some value rather than equality
- // so that we need not update the expected version each time.
-@@ -231,6 +224,29 @@ CollationAPITest::TestProperty(/* char* par */)
- delete junk;
- }
-
-+void CollationAPITest::TestKeywordValues() {
-+ IcuTestErrorCode errorCode(*this, "TestKeywordValues");
-+ LocalPointer<Collator> col(Collator::createInstance(Locale::getEnglish(), errorCode));
-+ if (errorCode.logIfFailureAndReset("English Collator creation failed")) {
-+ return;
-+ }
-+
-+ LocalPointer<StringEnumeration> kwEnum(
-+ col->getKeywordValuesForLocale("collation", Locale::getEnglish(), TRUE, errorCode));
-+ if (errorCode.logIfFailureAndReset("Get Keyword Values for English Collator failed")) {
-+ return;
-+ }
-+ assertTrue("expect at least one collation tailoring for English", kwEnum->count(errorCode) > 0);
-+ const char *kw;
-+ UBool hasStandard = FALSE;
-+ while ((kw = kwEnum->next(NULL, errorCode)) != NULL) {
-+ if (strcmp(kw, "standard") == 0) {
-+ hasStandard = TRUE;
-+ }
-+ }
-+ assertTrue("expect at least the 'standard' collation tailoring for English", hasStandard);
-+}
-+
- void
- CollationAPITest::TestRuleBasedColl()
- {
-@@ -2466,6 +2482,7 @@ void CollationAPITest::runIndexedTest( int32_t ind
- if (exec) logln("TestSuite CollationAPITest: ");
- TESTCASE_AUTO_BEGIN;
- TESTCASE_AUTO(TestProperty);
-+ TESTCASE_AUTO(TestKeywordValues);
- TESTCASE_AUTO(TestOperators);
- TESTCASE_AUTO(TestDuplicate);
- TESTCASE_AUTO(TestCompare);
-Index: i18n/ucol_res.cpp
-===================================================================
---- i18n/ucol_res.cpp (revision 39483)
-+++ i18n/ucol_res.cpp (revision 39484)
-@@ -680,6 +680,7 @@ ucol_getKeywordValuesForLocale(const char* /*key*/
- return NULL;
- }
- memcpy(en, &defaultKeywordValues, sizeof(UEnumeration));
-+ ulist_resetList(sink.values); // Initialize the iterator.
- en->context = sink.values;
- sink.values = NULL; // Avoid deletion in the sink destructor.
- return en;
-Index: common/ulist.c
-===================================================================
---- common/ulist.c (revision 39483)
-+++ common/ulist.c (revision 39484)
-@@ -29,7 +29,6 @@ struct UList {
- UListNode *tail;
-
- int32_t size;
-- int32_t currentIndex;
- };
-
- static void ulist_addFirstItem(UList *list, UListNode *newItem);
-@@ -51,7 +50,6 @@ U_CAPI UList *U_EXPORT2 ulist_createEmptyList(UErr
- newList->head = NULL;
- newList->tail = NULL;
- newList->size = 0;
-- newList->currentIndex = -1;
-
- return newList;
- }
-@@ -80,8 +78,9 @@ static void ulist_removeItem(UList *list, UListNod
- } else {
- p->next->previous = p->previous;
- }
-- list->curr = NULL;
-- list->currentIndex = 0;
-+ if (p == list->curr) {
-+ list->curr = p->next;
-+ }
- --list->size;
- if (p->forceDelete) {
- uprv_free(p->data);
-@@ -150,7 +149,6 @@ U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList
- newItem->next = list->head;
- list->head->previous = newItem;
- list->head = newItem;
-- list->currentIndex++;
- }
-
- list->size++;
-@@ -193,7 +191,6 @@ U_CAPI void *U_EXPORT2 ulist_getNext(UList *list)
-
- curr = list->curr;
- list->curr = curr->next;
-- list->currentIndex++;
-
- return curr->data;
- }
-@@ -209,7 +206,6 @@ U_CAPI int32_t U_EXPORT2 ulist_getListSize(const U
- U_CAPI void U_EXPORT2 ulist_resetList(UList *list) {
- if (list != NULL) {
- list->curr = list->head;
-- list->currentIndex = 0;
- }
- }
-
-@@ -272,4 +268,3 @@ U_CAPI void U_EXPORT2 ulist_reset_keyword_values_i
- U_CAPI UList * U_EXPORT2 ulist_getListFromEnum(UEnumeration *en) {
- return (UList *)(en->context);
- }
--
diff --git a/devel/icu/files/patch-r39671 b/devel/icu/files/patch-r39671
deleted file mode 100644
index a746fc2c099d..000000000000
--- a/devel/icu/files/patch-r39671
+++ /dev/null
@@ -1,176 +0,0 @@
-Index: test/intltest/utxttest.h
-===================================================================
---- test/intltest/utxttest.h (revision 39670)
-+++ test/intltest/utxttest.h (revision 39671)
-@@ -38,6 +38,7 @@ class UTextTest : public IntlTest {
- void Ticket10562();
- void Ticket10983();
- void Ticket12130();
-+ void Ticket12888();
-
- private:
- struct m { // Map between native indices & code points.
-Index: test/intltest/utxttest.cpp
-===================================================================
---- test/intltest/utxttest.cpp (revision 39670)
-+++ test/intltest/utxttest.cpp (revision 39671)
-@@ -67,6 +67,8 @@ UTextTest::runIndexedTest(int32_t index, UBool exe
- if (exec) Ticket10983(); break;
- case 7: name = "Ticket12130";
- if (exec) Ticket12130(); break;
-+ case 8: name = "Ticket12888";
-+ if (exec) Ticket12888(); break;
- default: name = ""; break;
- }
- }
-@@ -1583,3 +1585,63 @@ void UTextTest::Ticket12130() {
- }
- utext_close(&ut);
- }
-+
-+// Ticket 12888: bad handling of illegal utf-8 containing many instances of the archaic, now illegal,
-+// six byte utf-8 forms. Original implementation had an assumption that
-+// there would be at most three utf-8 bytes per UTF-16 code unit.
-+// The five and six byte sequences map to a single replacement character.
-+
-+void UTextTest::Ticket12888() {
-+ const char *badString =
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80";
-+
-+ UErrorCode status = U_ZERO_ERROR;
-+ LocalUTextPointer ut(utext_openUTF8(NULL, badString, -1, &status));
-+ TEST_SUCCESS(status);
-+ for (;;) {
-+ UChar32 c = utext_next32(ut.getAlias());
-+ if (c == U_SENTINEL) {
-+ break;
-+ }
-+ }
-+ int32_t endIdx = utext_getNativeIndex(ut.getAlias());
-+ if (endIdx != (int32_t)strlen(badString)) {
-+ errln("%s:%d expected=%d, actual=%d", __FILE__, __LINE__, strlen(badString), endIdx);
-+ return;
-+ }
-+
-+ for (int32_t prevIndex = endIdx; prevIndex>0;) {
-+ UChar32 c = utext_previous32(ut.getAlias());
-+ int32_t currentIndex = utext_getNativeIndex(ut.getAlias());
-+ if (c != 0xfffd) {
-+ errln("%s:%d (expected, actual, index) = (%d, %d, %d)\n",
-+ __FILE__, __LINE__, 0xfffd, c, currentIndex);
-+ break;
-+ }
-+ if (currentIndex != prevIndex - 6) {
-+ errln("%s:%d: wrong index. Expected, actual = %d, %d",
-+ __FILE__, __LINE__, prevIndex - 6, currentIndex);
-+ break;
-+ }
-+ prevIndex = currentIndex;
-+ }
-+}
-Index: common/utext.cpp
-===================================================================
---- common/utext.cpp (revision 39670)
-+++ common/utext.cpp (revision 39671)
-@@ -847,9 +847,15 @@ U_CDECL_END
- //------------------------------------------------------------------------------
-
- // Chunk size.
--// Must be less than 85, because of byte mapping from UChar indexes to native indexes.
--// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes
--// to two UChars.)
-+// Must be less than 42 (256/6), because of byte mapping from UChar indexes to native indexes.
-+// Worst case there are six UTF-8 bytes per UChar.
-+// obsolete 6 byte form fd + 5 trails maps to fffd
-+// obsolete 5 byte form fc + 4 trails maps to fffd
-+// non-shortest 4 byte forms maps to fffd
-+// normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit
-+// mapToUChars array size must allow for the worst case, 6.
-+// This could be brought down to 4, by treating fd and fc as pure illegal,
-+// rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros.
- //
- enum { UTF8_TEXT_CHUNK_SIZE=32 };
-
-@@ -889,7 +895,7 @@ struct UTF8Buf {
- // Requires two extra slots,
- // one for a supplementary starting in the last normal position,
- // and one for an entry for the buffer limit position.
-- uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to
-+ uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*6+6]; // Map native offset from bufNativeStart to
- // correspoding offset in filled part of buf.
- int32_t align;
- };
-@@ -1032,6 +1038,7 @@ utf8TextAccess(UText *ut, int64_t index, UBool for
- // Requested index is in this buffer.
- u8b = (UTF8Buf *)ut->p; // the current buffer
- mapIndex = ix - u8b->toUCharsMapStart;
-+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars));
- ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
- return TRUE;
-
-@@ -1298,6 +1305,10 @@ fillReverse:
- // Can only do this if the incoming index is somewhere in the interior of the string.
- // If index is at the end, there is no character there to look at.
- if (ix != ut->b) {
-+ // Note: this function will only move the index back if it is on a trail byte
-+ // and there is a preceding lead byte and the sequence from the lead
-+ // through this trail could be part of a valid UTF-8 sequence
-+ // Otherwise the index remains unchanged.
- U8_SET_CP_START(s8, 0, ix);
- }
-
-@@ -1311,7 +1322,10 @@ fillReverse:
- UChar *buf = u8b->buf;
- uint8_t *mapToNative = u8b->mapToNative;
- uint8_t *mapToUChars = u8b->mapToUChars;
-- int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1);
-+ int32_t toUCharsMapStart = ix - sizeof(UTF8Buf::mapToUChars) + 1;
-+ // Note that toUCharsMapStart can be negative. Happens when the remaining
-+ // text from current position to the beginning is less than the buffer size.
-+ // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry.
- int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region
- // at end of buffer to leave room
- // for a surrogate pair at the
-@@ -1338,6 +1352,7 @@ fillReverse:
- if (c<0x80) {
- // Special case ASCII range for speed.
- buf[destIx] = (UChar)c;
-+ U_ASSERT(toUCharsMapStart <= srcIx);
- mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx;
- mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart);
- } else {
-@@ -1367,6 +1382,7 @@ fillReverse:
- do {
- mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx;
- } while (sIx >= srcIx);
-+ U_ASSERT(toUCharsMapStart <= (srcIx+1));
-
- // Set native indexing limit to be the current position.
- // We are processing a non-ascii, non-native-indexing char now;
-@@ -1541,6 +1557,7 @@ utf8TextMapIndexToUTF16(const UText *ut, int64_t i
- U_ASSERT(index>=ut->chunkNativeStart+ut->nativeIndexingLimit);
- U_ASSERT(index<=ut->chunkNativeLimit);
- int32_t mapIndex = index - u8b->toUCharsMapStart;
-+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars));
- int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
- U_ASSERT(offset>=0 && offset<=ut->chunkLength);
- return offset;
diff --git a/devel/icu/pkg-plist b/devel/icu/pkg-plist
index b4d1e7191688..10ff8f4674ea 100644
--- a/devel/icu/pkg-plist
+++ b/devel/icu/pkg-plist
@@ -1,3 +1,4 @@
+sbin/escapesrc
sbin/icupkg
sbin/gensprep
sbin/gennorm2
@@ -44,6 +45,8 @@ include/unicode/bytestrie.h
include/unicode/bytestriebuilder.h
include/unicode/calendar.h
include/unicode/caniter.h
+include/unicode/casemap.h
+include/unicode/char16ptr.h
include/unicode/chariter.h
include/unicode/choicfmt.h
include/unicode/coleitr.h
@@ -63,6 +66,7 @@ include/unicode/dtitvfmt.h
include/unicode/dtitvinf.h
include/unicode/dtptngen.h
include/unicode/dtrule.h
+include/unicode/edits.h
include/unicode/enumset.h
include/unicode/errorcode.h
include/unicode/fieldpos.h