From 0f73433b13ba9e3f38193ddd86f4b9b767a36bb2 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Fri, 17 Nov 2017 02:24:52 +0200 Subject: Revert "Upgrade to ICU 60.1" This reverts commit f643e1f687e27e7f46c53d7298772d4dddb3e660. Failing in firebird, back to the drawing board.. Change-Id: I087d2fa6e81cf713458b1c9645edc7c1facf148c Reviewed-on: https://gerrit.libreoffice.org/44843 Reviewed-by: Eike Rathke Tested-by: Eike Rathke --- configure.ac | 2 +- download.lst | 8 +- external/icu/UnpackedTarball_icu.mk | 3 + external/icu/icu4c-59-icu13329-xlocale.patch.1 | 14 ++ external/icu/icu4c-59-werror-shadow.patch.1 | 42 ++++++ external/icu/icu4c-59-werror-undef.patch.1 | 13 ++ external/icu/icu4c-changeset-39671.patch.1 | 155 +++++++++++++++++++++ external/icu/icu4c-changeset-40324.patch.1 | 11 ++ external/icu/icu4c-khmerbreakengine.patch.1 | 12 +- external/icu/icu4c-ubsan.patch.1 | 80 +++++++++++ .../source/breakiterator/breakiterator_unicode.cxx | 21 --- i18nutil/source/utility/unicode.cxx | 11 -- include/svx/strings.hrc | 7 - svx/source/dialog/charmap.cxx | 23 --- 14 files changed, 329 insertions(+), 73 deletions(-) create mode 100644 external/icu/icu4c-59-icu13329-xlocale.patch.1 create mode 100644 external/icu/icu4c-59-werror-undef.patch.1 create mode 100644 external/icu/icu4c-changeset-39671.patch.1 create mode 100644 external/icu/icu4c-changeset-40324.patch.1 diff --git a/configure.ac b/configure.ac index dd4f8a4c0a95..993d85794802 100644 --- a/configure.ac +++ b/configure.ac @@ -8827,7 +8827,7 @@ SYSTEM_GENBRK= SYSTEM_GENCCODE= SYSTEM_GENCMN= -ICU_MAJOR=60 +ICU_MAJOR=59 ICU_MINOR=1 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE" ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE" diff --git a/download.lst b/download.lst index 6f054754f587..dca14ac081be 100644 --- a/download.lst +++ b/download.lst @@ -92,10 +92,10 @@ export HUNSPELL_SHA256SUM := 3cd9ceb062fe5814f668e4f22b2fa6e3ba0b339b921739541ce export HUNSPELL_TARBALL := hunspell-1.6.2.tar.gz export HYPHEN_SHA256SUM := 304636d4eccd81a14b6914d07b84c79ebb815288c76fe027b9ebff6ff24d5705 export HYPHEN_TARBALL := 5ade6ae2a99bc1e9e57031ca88d36dad-hyphen-2.8.8.tar.gz -export ICU_SHA256SUM := f8f5a6c8fbf32c015a467972bdb1477dc5f5d5dfea908b6ed218715eeb5ee225 -export ICU_TARBALL := icu4c-60_1-src.tgz -export ICU_DATA_SHA256SUM := bbb920c6e67de8d9dcc0f0ec5554870170d0cb5eff6f0bc9881efc605f68210c -export ICU_DATA_TARBALL := icu4c-60_1-data.zip +export ICU_SHA256SUM := 7132fdaf9379429d004005217f10e00b7d2319d0fea22bdfddef8991c45b75fe +export ICU_TARBALL := icu4c-59_1-src.tgz +export ICU_DATA_SHA256SUM := 38a84c1289c32a96924ff286a2f33edc97671b4cc90e8c99708553a6b5a9e70a +export ICU_DATA_TARBALL := icu4c-59_1-data.zip export JFREEREPORT_FLOW_ENGINE_SHA256SUM := 233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd export JFREEREPORT_FLOW_ENGINE_TARBALL := ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip export JFREEREPORT_FLUTE_SHA256SUM := 1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133 diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk index 499650976a55..7bf2926e5a83 100644 --- a/external/icu/UnpackedTarball_icu.mk +++ b/external/icu/UnpackedTarball_icu.mk @@ -34,7 +34,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,icu,\ external/icu/icu4c-clang-cl.patch.1 \ $(if $(filter-out ANDROID,$(OS)),external/icu/icu4c-icudata-stdlibs.patch.1) \ external/icu/icu4c-khmerbreakengine.patch.1 \ + external/icu/icu4c-59-werror-undef.patch.1 \ external/icu/icu4c-59-werror-shadow.patch.1 \ + external/icu/icu4c-59-icu13329-xlocale.patch.1 \ + external/icu/icu4c-changeset-40324.patch.1 \ )) $(eval $(call gb_UnpackedTarball_add_file,icu,source/data/brkitr/khmerdict.dict,external/icu/khmerdict.dict)) diff --git a/external/icu/icu4c-59-icu13329-xlocale.patch.1 b/external/icu/icu4c-59-icu13329-xlocale.patch.1 new file mode 100644 index 000000000000..93e14d23fa5a --- /dev/null +++ b/external/icu/icu4c-59-icu13329-xlocale.patch.1 @@ -0,0 +1,14 @@ +# xlocale.h is gone with glibc 2.26 and should never had been included. +# https://ssl.icu-project.org/trac/ticket/13329 +diff -ur icu.org/source/i18n/digitlst.cpp icu/source/i18n/digitlst.cpp +--- icu.org/source/i18n/digitlst.cpp 2017-01-20 01:20:31.000000000 +0100 ++++ icu/source/i18n/digitlst.cpp 2017-09-13 13:25:59.980160603 +0200 +@@ -63,6 +63,8 @@ + #if U_USE_STRTOD_L + # if U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_CYGWIN + # include ++# elif U_PLATFORM_IS_LINUX_BASED ++# include // should be for all POSIX.2008 compliant platforms, but.. + # else + # include + # endif diff --git a/external/icu/icu4c-59-werror-shadow.patch.1 b/external/icu/icu4c-59-werror-shadow.patch.1 index fb88244aff13..2031f80cb908 100644 --- a/external/icu/icu4c-59-werror-shadow.patch.1 +++ b/external/icu/icu4c-59-werror-shadow.patch.1 @@ -1,3 +1,45 @@ +diff -ur icu.org/source/common/unicode/char16ptr.h icu/source/common/unicode/char16ptr.h +# https://ssl.icu-project.org/trac/ticket/13176 +--- icu.org/source/common/unicode/char16ptr.h 2017-03-29 06:44:37.000000000 +0200 ++++ icu/source/common/unicode/char16ptr.h 2017-04-24 11:56:47.707572355 +0200 +@@ -107,14 +107,14 @@ + + #ifdef U_ALIASING_BARRIER + +-Char16Ptr::Char16Ptr(char16_t *p) : p(p) {} ++Char16Ptr::Char16Ptr(char16_t *p_) : p(p_) {} + #if !U_CHAR16_IS_TYPEDEF +-Char16Ptr::Char16Ptr(uint16_t *p) : p(cast(p)) {} ++Char16Ptr::Char16Ptr(uint16_t *p_) : p(cast(p_)) {} + #endif + #if U_SIZEOF_WCHAR_T==2 +-Char16Ptr::Char16Ptr(wchar_t *p) : p(cast(p)) {} ++Char16Ptr::Char16Ptr(wchar_t *p_) : p(cast(p_)) {} + #endif +-Char16Ptr::Char16Ptr(std::nullptr_t p) : p(p) {} ++Char16Ptr::Char16Ptr(std::nullptr_t p_) : p(p_) {} + Char16Ptr::~Char16Ptr() { + U_ALIASING_BARRIER(p); + } +@@ -215,14 +215,14 @@ + + #ifdef U_ALIASING_BARRIER + +-ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p(p) {} ++ConstChar16Ptr::ConstChar16Ptr(const char16_t *p_) : p(p_) {} + #if !U_CHAR16_IS_TYPEDEF +-ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) : p(cast(p)) {} ++ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p_) : p(cast(p_)) {} + #endif + #if U_SIZEOF_WCHAR_T==2 +-ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) : p(cast(p)) {} ++ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p_) : p(cast(p_)) {} + #endif +-ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) : p(p) {} ++ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p_) : p(p_) {} + ConstChar16Ptr::~ConstChar16Ptr() { + U_ALIASING_BARRIER(p); + } diff -ur icu.org/source/common/unicode/unistr.h icu/source/common/unicode/unistr.h --- icu.org/source/common/unicode/unistr.h 2017-03-29 06:44:37.000000000 +0200 +++ icu/source/common/unicode/unistr.h 2017-04-24 11:59:51.782076511 +0200 diff --git a/external/icu/icu4c-59-werror-undef.patch.1 b/external/icu/icu4c-59-werror-undef.patch.1 new file mode 100644 index 000000000000..0792e7357257 --- /dev/null +++ b/external/icu/icu4c-59-werror-undef.patch.1 @@ -0,0 +1,13 @@ +diff -ur icu.org/source/common/unicode/uvernum.h icu/source/common/unicode/uvernum.h +# https://ssl.icu-project.org/trac/ticket/13175 +--- icu.org/source/common/unicode/uvernum.h 2017-03-21 02:03:49.000000000 +0100 ++++ icu/source/common/unicode/uvernum.h 2017-04-21 23:44:55.123597927 +0200 +@@ -125,7 +125,7 @@ + * This value will change in the subsequent releases of ICU + * @stable ICU 2.6 + */ +-#if U_PLATFORM_HAS_WINUWP_API == 0 ++#if !defined(U_PLATFORM_HAS_WINUWP_API) || (U_PLATFORM_HAS_WINUWP_API == 0) + #define U_ICU_VERSION_SHORT "59" + #else + // U_DISABLE_RENAMING does not impact dat file name diff --git a/external/icu/icu4c-changeset-39671.patch.1 b/external/icu/icu4c-changeset-39671.patch.1 new file mode 100644 index 000000000000..fa8d3679ebff --- /dev/null +++ b/external/icu/icu4c-changeset-39671.patch.1 @@ -0,0 +1,155 @@ +Index: /trunk/icu4c/source/common/utext.cpp +=================================================================== +--- icu.orig/source/common/utext.cpp ++++ icu/source/common/utext.cpp +@@ -848,7 +848,13 @@ + + // 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 }; +@@ -890,5 +896,5 @@ + // 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; +@@ -1033,4 +1039,5 @@ + 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; +@@ -1299,4 +1306,8 @@ + // 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); + } +@@ -1312,5 +1323,8 @@ + 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 +@@ -1339,4 +1353,5 @@ + // 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); +@@ -1368,4 +1383,5 @@ + mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx; + } while (sIx >= srcIx); ++ U_ASSERT(toUCharsMapStart <= (srcIx+1)); + + // Set native indexing limit to be the current position. +@@ -1542,4 +1558,5 @@ + 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); +Index: /trunk/icu4c/source/test/intltest/utxttest.cpp +=================================================================== +--- icu.orig/source/test/intltest/utxttest.cpp ++++ icu/source/test/intltest/utxttest.cpp +@@ -68,4 +68,6 @@ + case 7: name = "Ticket12130"; + if (exec) Ticket12130(); break; ++ case 8: name = "Ticket12888"; ++ if (exec) Ticket12888(); break; + default: name = ""; break; + } +@@ -1584,2 +1586,62 @@ + 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: /trunk/icu4c/source/test/intltest/utxttest.h +=================================================================== +--- icu.orig/source/test/intltest/utxttest.h ++++ icu/source/test/intltest/utxttest.h +@@ -39,4 +39,5 @@ + void Ticket10983(); + void Ticket12130(); ++ void Ticket12888(); + + private: diff --git a/external/icu/icu4c-changeset-40324.patch.1 b/external/icu/icu4c-changeset-40324.patch.1 new file mode 100644 index 000000000000..a651eb19415d --- /dev/null +++ b/external/icu/icu4c-changeset-40324.patch.1 @@ -0,0 +1,11 @@ +# https://ssl.icu-project.org/trac/changeset/40324/trunk/icu4c/source/i18n/zonemeta.cpp +Index: trunk/icu4c/source/i18n/zonemeta.cpp +=================================================================== +--- icu.orig/source/i18n/zonemeta.cpp ++++ icu/source/i18n/zonemeta.cpp +@@ -691,5 +691,4 @@ + if (U_FAILURE(status)) { + delete mzMappings; +- deleteOlsonToMetaMappingEntry(entry); + uprv_free(entry); + break; diff --git a/external/icu/icu4c-khmerbreakengine.patch.1 b/external/icu/icu4c-khmerbreakengine.patch.1 index 6b45b3743611..74f60f866257 100644 --- a/external/icu/icu4c-khmerbreakengine.patch.1 +++ b/external/icu/icu4c-khmerbreakengine.patch.1 @@ -310,7 +310,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp @@ -886,180 +1035,204 @@ int32_t rangeStart, int32_t rangeEnd, - UVector32 &foundBreaks ) const { + UStack &foundBreaks ) const { - if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) { - return 0; // Not enough characters for two words - } @@ -760,7 +760,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h * @param text A UText representing the text. The iterator is left at - * the end of the run of characters which the engine is capable of handling + * the end of the run of characters which the engine is capable of handling - * that starts from the first character in the range. + * that starts from the first (or last) character in the range. * @param startPos The start of the run within the supplied text. * @param endPos The end of the run within the supplied text. @@ -245,118 +306,120 @@ @@ -819,7 +819,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h - virtual int32_t divideUpDictionaryRange( UText *text, - int32_t rangeStart, - int32_t rangeEnd, -- UVector32 &foundBreaks ) const; +- UStack &foundBreaks ) const; - -}; - @@ -875,7 +875,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h - virtual int32_t divideUpDictionaryRange( UText *text, - int32_t rangeStart, - int32_t rangeEnd, -- UVector32 &foundBreaks ) const; +- UStack &foundBreaks ) const; - -}; - @@ -931,7 +931,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h + virtual int32_t divideUpDictionaryRange( UText *text, + int32_t rangeStart, + int32_t rangeEnd, -+ UVector32 &foundBreaks ) const; ++ UStack &foundBreaks ) const; + +}; + @@ -989,7 +989,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h + virtual int32_t divideUpDictionaryRange( UText *text, + int32_t rangeStart, + int32_t rangeEnd, -+ UVector32 &foundBreaks ) const; ++ UStack &foundBreaks ) const; + +}; + diff --git a/external/icu/icu4c-ubsan.patch.1 b/external/icu/icu4c-ubsan.patch.1 index 9f6aa3fbc9f8..56594005e9d0 100644 --- a/external/icu/icu4c-ubsan.patch.1 +++ b/external/icu/icu4c-ubsan.patch.1 @@ -65,6 +65,18 @@ diff -ur icu.org/source/common/ubidiimp.h icu/source/common/ubidiimp.h #define REMOVE_ODD_BIT(x) ((x)&=~INDEX_ODD_BIT) #define GET_INDEX(x) ((x)&~INDEX_ODD_BIT) +diff -ur icu.org/source/common/ucharstriebuilder.cpp icu/source/common/ucharstriebuilder.cpp +--- icu.org/source/common/ucharstriebuilder.cpp 2017-02-03 19:57:23.000000000 +0100 ++++ icu/source/common/ucharstriebuilder.cpp 2017-04-21 22:46:25.375651159 +0200 +@@ -287,7 +287,7 @@ + + UCharsTrieBuilder::UCTLinearMatchNode::UCTLinearMatchNode(const UChar *units, int32_t len, Node *nextNode) + : LinearMatchNode(len, nextNode), s(units) { +- hash=hash*37+ustr_hashUCharsN(units, len); ++ hash=hash*37U+ustr_hashUCharsN(units, len); + } + + UBool diff -ur icu.org/source/common/ucmndata.cpp icu/source/common/ucmndata.cpp --- icu.org/source/common/ucmndata.cpp 2017-03-08 16:34:47.000000000 +0100 +++ icu/source/common/ucmndata.cpp 2017-04-21 22:46:25.376651159 +0200 @@ -89,3 +101,71 @@ diff -ur icu.org/source/common/ucmndata.h icu/source/common/ucmndata.h } UDataOffsetTOC; /** +diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/unicode/stringtriebuilder.h +--- icu.org/source/common/unicode/stringtriebuilder.h 2017-03-10 23:01:34.000000000 +0100 ++++ icu/source/common/unicode/stringtriebuilder.h 2017-04-21 22:47:43.395634383 +0200 +@@ -276,7 +276,7 @@ + void setValue(int32_t v) { + hasValue=TRUE; + value=v; +- hash=hash*37+v; ++ hash=hash*37U+v; + } + protected: + UBool hasValue; +@@ -307,7 +307,7 @@ + class LinearMatchNode : public ValueNode { + public: + LinearMatchNode(int32_t len, Node *nextNode) +- : ValueNode((0x333333*37+len)*37+hashCode(nextNode)), ++ : ValueNode((0x333333U*37+len)*37+hashCode(nextNode)), + length(len), next(nextNode) {} + virtual UBool operator==(const Node &other) const; + virtual int32_t markRightEdgesFirst(int32_t edgeNumber); +@@ -342,7 +342,7 @@ + equal[length]=NULL; + values[length]=value; + ++length; +- hash=(hash*37+c)*37+value; ++ hash=(hash*37U+c)*37+value; + } + // Adds a unit which leads to another match node. + void add(int32_t c, Node *node) { +@@ -350,7 +350,7 @@ + equal[length]=node; + values[length]=0; + ++length; +- hash=(hash*37+c)*37+hashCode(node); ++ hash=(hash*37U+c)*37+hashCode(node); + } + protected: + Node *equal[kMaxBranchLinearSubNodeLength]; // NULL means "has final value". +@@ -365,7 +365,7 @@ + class SplitBranchNode : public BranchNode { + public: + SplitBranchNode(char16_t middleUnit, Node *lessThanNode, Node *greaterOrEqualNode) +- : BranchNode(((0x555555*37+middleUnit)*37+ ++ : BranchNode(((0x555555U*37+middleUnit)*37+ + hashCode(lessThanNode))*37+hashCode(greaterOrEqualNode)), + unit(middleUnit), lessThan(lessThanNode), greaterOrEqual(greaterOrEqualNode) {} + virtual UBool operator==(const Node &other) const; +@@ -382,7 +382,7 @@ + class BranchHeadNode : public ValueNode { + public: + BranchHeadNode(int32_t len, Node *subNode) +- : ValueNode((0x666666*37+len)*37+hashCode(subNode)), ++ : ValueNode((0x666666U*37+len)*37+hashCode(subNode)), + length(len), next(subNode) {} + virtual UBool operator==(const Node &other) const; + virtual int32_t markRightEdgesFirst(int32_t edgeNumber); +diff -ur icu.org/source/i18n/collationdatareader.cpp icu/source/i18n/collationdatareader.cpp +--- icu.org/source/i18n/collationdatareader.cpp 2017-01-20 01:20:31.000000000 +0100 ++++ icu/source/i18n/collationdatareader.cpp 2017-04-21 22:46:25.380651158 +0200 +@@ -419,6 +419,7 @@ + tailoring.data, ts, fastLatinPrimaries, UPRV_LENGTHOF(fastLatinPrimaries)); + if(options == ts.options && ts.variableTop != 0 && + reorderCodesLength == ts.reorderCodesLength && ++ reorderCodesLength != 0 && + uprv_memcmp(reorderCodes, ts.reorderCodes, reorderCodesLength * 4) == 0 && + fastLatinOptions == ts.fastLatinOptions && + (fastLatinOptions < 0 || diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx b/i18npool/source/breakiterator/breakiterator_unicode.cxx index b4ca111179c1..bd9d09a34afc 100644 --- a/i18npool/source/breakiterator/breakiterator_unicode.cxx +++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx @@ -544,27 +544,6 @@ LineBreakResults SAL_CALL BreakIterator_Unicode::getLineBreak( } else { //word boundary break lbr.breakIndex = pLineBI->preceding(nStartPos); lbr.breakType = BreakType::WORDBOUNDARY; - - // Special case for Slash U+002F SOLIDUS in URI and path names. - // TR14 defines that as SY: Symbols Allowing Break After (A). - // This is unwanted in paths, see also i#17155 - if (lbr.breakIndex > 0 && Text[lbr.breakIndex-1] == '/') - { - // Look backward and take any whitespace before as a break - // opportunity. This also glues something like "w/o". - // Avoid an overly long path and break it as was indicated. - // Overly long here is arbitrarily defined. - const sal_Int32 nOverlyLong = 66; - sal_Int32 nPos = lbr.breakIndex - 1; - while (nPos > 0 && lbr.breakIndex - nPos < nOverlyLong) - { - if (u_isWhitespace(Text.iterateCodePoints( &nPos, -1))) - { - lbr.breakIndex = nPos + 1; - break; - } - } - } } #define WJ 0x2060 // Word Joiner diff --git a/i18nutil/source/utility/unicode.cxx b/i18nutil/source/utility/unicode.cxx index 0173a4ad5fbf..94abe5220f84 100644 --- a/i18nutil/source/utility/unicode.cxx +++ b/i18nutil/source/utility/unicode.cxx @@ -715,17 +715,6 @@ OString SAL_CALL unicode::getExemplarLanguageForUScriptCode(UScriptCode eScript) case USCRIPT_SYMBOLS_EMOJI: sRet = "mis"; // Zsye - Emoji variant break; -#endif -#if (U_ICU_VERSION_MAJOR_NUM >= 60) - case USCRIPT_MASARAM_GONDI: - sRet = "gon-Gonm"; // macro language code, could be wsg,esg,gno - break; - case USCRIPT_SOYOMBO: - sRet = "mn-Soyo"; // abugida to write Mongolian, also Tibetan and Sanskrit - break; - case USCRIPT_ZANABAZAR_SQUARE: - sRet = "mn-Zanb"; // abugida to write Mongolian - break; #endif } return sRet; diff --git a/include/svx/strings.hrc b/include/svx/strings.hrc index b9d296028853..bed776d4ce1a 100644 --- a/include/svx/strings.hrc +++ b/include/svx/strings.hrc @@ -1645,13 +1645,6 @@ #define RID_SUBSETSTR_OSAGE NC_("RID_SUBSETMAP", "Osage") #define RID_SUBSETSTR_TANGUT NC_("RID_SUBSETMAP", "Tangut") #define RID_SUBSETSTR_TANGUT_COMPONENTS NC_("RID_SUBSETMAP", "Tangut Components") -#define RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F NC_("RID_SUBSETMAP", "CJK Unified Ideographs Extension F") -#define RID_SUBSETSTR_KANA_EXTENDED_A NC_("RID_SUBSETMAP", "Kana Extended-A") -#define RID_SUBSETSTR_MASARAM_GONDI NC_("RID_SUBSETMAP", "Masaram Gondi") -#define RID_SUBSETSTR_NUSHU NC_("RID_SUBSETMAP", "Nushu") -#define RID_SUBSETSTR_SOYOMBO NC_("RID_SUBSETMAP", "Soyombo") -#define RID_SUBSETSTR_SYRIAC_SUPPLEMENT NC_("RID_SUBSETMAP", "Syriac Supplement") -#define RID_SUBSETSTR_ZANABAZAR_SQUARE NC_("RID_SUBSETMAP", "Zanabazar Square") // TSCP Classification #define RID_CLASSIFICATION_CHANGE_CATEGORY NC_("RID_CLASSIFICATION_CHANGE_CATEGORY", "Do you really want to change the classification category?") diff --git a/svx/source/dialog/charmap.cxx b/svx/source/dialog/charmap.cxx index 9fc4f3f66a8b..510ca605711a 100644 --- a/svx/source/dialog/charmap.cxx +++ b/svx/source/dialog/charmap.cxx @@ -1822,29 +1822,6 @@ void SubsetMap::InitList() aAllSubsets.emplace_back( 0x18800, 0x18AFF, SvxResId(RID_SUBSETSTR_TANGUT_COMPONENTS) ); break; #endif -#if (U_ICU_VERSION_MAJOR_NUM >= 60) - case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F: - aAllSubsets.emplace_back( 0x2CEB0, 0x2EBE0, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F) ); - break; - case UBLOCK_KANA_EXTENDED_A: - aAllSubsets.emplace_back( 0x1B100, 0x1B12F, SvxResId(RID_SUBSETSTR_KANA_EXTENDED_A) ); - break; - case UBLOCK_MASARAM_GONDI: - aAllSubsets.emplace_back( 0x11D00, 0x11D5F, SvxResId(RID_SUBSETSTR_MASARAM_GONDI) ); - break; - case UBLOCK_NUSHU: - aAllSubsets.emplace_back( 0x1B170, 0x1B2FF, SvxResId(RID_SUBSETSTR_NUSHU) ); - break; - case UBLOCK_SOYOMBO: - aAllSubsets.emplace_back( 0x11A50, 0x11AAF, SvxResId(RID_SUBSETSTR_SOYOMBO) ); - break; - case UBLOCK_SYRIAC_SUPPLEMENT: - aAllSubsets.emplace_back( 0x0860, 0x086f, SvxResId(RID_SUBSETSTR_SYRIAC_SUPPLEMENT) ); - break; - case UBLOCK_ZANABAZAR_SQUARE: - aAllSubsets.emplace_back( 0x11A00, 0x11A4F, SvxResId(RID_SUBSETSTR_ZANABAZAR_SQUARE) ); - break; -#endif } -- cgit