From ad8df3bc01f6b9e0bed8b0bd87bf9f1ce3c231e0 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Fri, 25 Oct 2024 15:42:53 +0300 Subject: [PATCH] import icu-74.2-3.el10 --- .gitignore | 1 + .icu.metadata | 1 + ...0001-ICU-21667-Fix-coverity-warnings.patch | 390 ++++++++ .../0002-Fix-coverity-warnings-icu-74.2.patch | 487 ++++++++++ SOURCES/gennorm2-man.patch | 128 +++ SOURCES/icu-config.sh | 11 + SOURCES/icuinfo-man.patch | 145 +++ SPECS/icu.spec | 871 ++++++++++++++++++ 8 files changed, 2034 insertions(+) create mode 100644 .gitignore create mode 100644 .icu.metadata create mode 100644 SOURCES/0001-ICU-21667-Fix-coverity-warnings.patch create mode 100644 SOURCES/0002-Fix-coverity-warnings-icu-74.2.patch create mode 100644 SOURCES/gennorm2-man.patch create mode 100644 SOURCES/icu-config.sh create mode 100644 SOURCES/icuinfo-man.patch create mode 100644 SPECS/icu.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5c8c511 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/icu4c-74_2-src-FIXED.tgz diff --git a/.icu.metadata b/.icu.metadata new file mode 100644 index 0000000..eb2d6e3 --- /dev/null +++ b/.icu.metadata @@ -0,0 +1 @@ +43a8d688a3a6bc8f0f8c5e699d0ef7a905d24314 SOURCES/icu4c-74_2-src-FIXED.tgz diff --git a/SOURCES/0001-ICU-21667-Fix-coverity-warnings.patch b/SOURCES/0001-ICU-21667-Fix-coverity-warnings.patch new file mode 100644 index 0000000..3936729 --- /dev/null +++ b/SOURCES/0001-ICU-21667-Fix-coverity-warnings.patch @@ -0,0 +1,390 @@ +From af6fbac0bdba3080a8bcb5d12764d1fece2e9c1d Mon Sep 17 00:00:00 2001 +From: Mike FABIAN +Date: Mon, 23 Aug 2021 18:03:31 +0200 +Subject: [PATCH 1/2] ICU-21667 Fix coverity warnings + +See: https://unicode-org.atlassian.net/browse/ICU-21667 +(Issues found by coverity in icu-69.1) +--- + source/common/brkiter.cpp | 2 + + source/common/serv.cpp | 76 +++++++++++++---------- + source/common/serv.h | 5 ++ + source/common/uloc_keytype.cpp | 8 +++ + source/common/umutablecptrie.cpp | 2 +- + source/common/uresbund.cpp | 3 +- + source/i18n/decNumber.h | 2 +- + source/i18n/rbt_pars.cpp | 7 +-- + source/i18n/tridpars.cpp | 1 + + source/i18n/usearch.cpp | 2 + + source/i18n/uspoof_impl.cpp | 6 +- + source/tools/gensprep/store.c | 1 - + source/tools/makeconv/genmbcs.cpp | 4 ++ + source/tools/pkgdata/pkgtypes.c | 12 ++-- + source/tools/toolutil/filetools.cpp | 1 + + 15 files changed, 84 insertions(+), 48 deletions(-) + +diff --git a/source/common/brkiter.cpp b/source/common/brkiter.cpp +index b452cf2c050..e2edbe8eaf6 100644 +--- a/source/common/brkiter.cpp ++++ b/source/common/brkiter.cpp +@@ -107,7 +107,9 @@ BreakIterator::buildInstance(const Locale& loc, const char *type, UErrorCode &st + } + } + ++ /* coverity[incorrect_free] */ + ures_close(brkRules); ++ /* coverity[incorrect_free] */ + ures_close(brkName); + + UDataMemory* file = udata_open(U_ICUDATA_BRKITR, ext, fnbuff, &status); +diff --git a/source/common/serv.cpp b/source/common/serv.cpp +index 5248f7c192b..ddf17e45069 100644 +--- a/source/common/serv.cpp ++++ b/source/common/serv.cpp +@@ -722,49 +722,57 @@ UVector& + ICUService::getDisplayNames(UVector& result, + const Locale& locale, + const UnicodeString* matchID, +- UErrorCode& status) const ++ UErrorCode& status) const + { ++ // cast away semantic const ++ return const_cast(this)->getDisplayNamesImpl(result, locale, matchID, status); ++} ++ ++UVector& ++ICUService::getDisplayNamesImpl(UVector& result, ++ const Locale& locale, ++ const UnicodeString* matchID, ++ UErrorCode& status) ++{ ++ if (U_FAILURE(status)) { return result; } + result.removeAllElements(); + result.setDeleter(userv_deleteStringPair); +- if (U_SUCCESS(status)) { +- ICUService* ncthis = (ICUService*)this; // cast away semantic const +- Mutex mutex(&lock); ++ Mutex mutex(&lock); + +- if (dnCache != nullptr && dnCache->locale != locale) { +- delete dnCache; +- ncthis->dnCache = nullptr; +- } ++ if (dnCache != nullptr && dnCache->locale != locale) { ++ delete dnCache; ++ dnCache = nullptr; ++ } + ++ if (dnCache == nullptr) { ++ const Hashtable* m = getVisibleIDMap(status); ++ if (U_FAILURE(status)) { ++ return result; ++ } ++ dnCache = new DNCache(locale); + if (dnCache == nullptr) { +- const Hashtable* m = getVisibleIDMap(status); +- if (U_FAILURE(status)) { +- return result; +- } +- ncthis->dnCache = new DNCache(locale); +- if (dnCache == nullptr) { +- status = U_MEMORY_ALLOCATION_ERROR; +- return result; +- } ++ status = U_MEMORY_ALLOCATION_ERROR; ++ return result; ++ } + +- int32_t pos = UHASH_FIRST; +- const UHashElement* entry = nullptr; +- while ((entry = m->nextElement(pos)) != nullptr) { +- const UnicodeString* id = (const UnicodeString*)entry->key.pointer; +- ICUServiceFactory* f = (ICUServiceFactory*)entry->value.pointer; +- UnicodeString dname; +- f->getDisplayName(*id, locale, dname); +- if (dname.isBogus()) { +- status = U_MEMORY_ALLOCATION_ERROR; +- } else { +- dnCache->cache.put(dname, (void*)id, status); // share pointer with visibleIDMap +- if (U_SUCCESS(status)) { +- continue; +- } ++ int32_t pos = UHASH_FIRST; ++ const UHashElement* entry = nullptr; ++ while ((entry = m->nextElement(pos)) != nullptr) { ++ const UnicodeString* id = static_cast(entry->key.pointer); ++ ICUServiceFactory* f = static_cast(entry->value.pointer); ++ UnicodeString dname; ++ f->getDisplayName(*id, locale, dname); ++ if (dname.isBogus()) { ++ status = U_MEMORY_ALLOCATION_ERROR; ++ } else { ++ dnCache->cache.put(dname, (void*)id, status); // share pointer with visibleIDMap ++ if (U_SUCCESS(status)) { ++ continue; + } +- delete dnCache; +- ncthis->dnCache = nullptr; +- return result; + } ++ delete dnCache; ++ dnCache = nullptr; ++ return result; + } + } + +diff --git a/source/common/serv.h b/source/common/serv.h +index 9aea548fc3a..3c53f228738 100644 +--- a/source/common/serv.h ++++ b/source/common/serv.h +@@ -759,6 +759,11 @@ class U_COMMON_API ICUService : public ICUNotifier { + const UnicodeString* matchID, + UErrorCode& status) const; + ++ UVector& getDisplayNamesImpl(UVector& result, ++ const Locale& locale, ++ const UnicodeString* matchID, ++ UErrorCode& status); ++ + /** + *

A convenience override of registerInstance(UObject*, const UnicodeString&, UBool) + * that defaults visible to true.

+diff --git a/source/common/uloc_keytype.cpp b/source/common/uloc_keytype.cpp +index a84b8609079..a837e0f14a7 100644 +--- a/source/common/uloc_keytype.cpp ++++ b/source/common/uloc_keytype.cpp +@@ -327,12 +327,20 @@ initFromResourceBundle(UErrorCode& sts) { + } + } + if (U_FAILURE(sts)) { ++ if (typeDataMap != NULL) { ++ uhash_close(typeDataMap); ++ typeDataMap = NULL; ++ } + break; + } + + LocExtKeyData* keyData = gLocExtKeyDataEntries->create(); + if (keyData == nullptr) { + sts = U_MEMORY_ALLOCATION_ERROR; ++ if (typeDataMap != NULL) { ++ uhash_close(typeDataMap); ++ typeDataMap = NULL; ++ } + break; + } + keyData->bcpId = bcpKeyId; +diff --git a/source/common/umutablecptrie.cpp b/source/common/umutablecptrie.cpp +index cdbe27080b4..e58ab6f4897 100644 +--- a/source/common/umutablecptrie.cpp ++++ b/source/common/umutablecptrie.cpp +@@ -1543,7 +1543,7 @@ int32_t MutableCodePointTrie::compactTrie(int32_t fastILimit, UErrorCode &errorC + MixedBlocks mixedBlocks; + int32_t newDataLength = compactData(fastILimit, newData, newDataCapacity, + dataNullIndex, mixedBlocks, errorCode); +- if (U_FAILURE(errorCode)) { return 0; } ++ if (U_FAILURE(errorCode)) { uprv_free(newData); return 0; } + U_ASSERT(newDataLength <= newDataCapacity); + uprv_free(data); + data = newData; +diff --git a/source/common/uresbund.cpp b/source/common/uresbund.cpp +index 5aa1c5fa2f1..7d16cd048ef 100644 +--- a/source/common/uresbund.cpp ++++ b/source/common/uresbund.cpp +@@ -2927,7 +2927,8 @@ typedef struct ULocalesContext { + + static void U_CALLCONV + ures_loc_closeLocales(UEnumeration *enumerator) { +- ULocalesContext *ctx = (ULocalesContext *)enumerator->context; ++ if (enumerator == nullptr) { return; } ++ ULocalesContext* ctx = (ULocalesContext *)(enumerator->context); + ures_close(&ctx->curr); + ures_close(&ctx->installed); + uprv_free(ctx); +diff --git a/source/i18n/decNumber.h b/source/i18n/decNumber.h +index 4a1eb364e19..6ad94386c1f 100644 +--- a/source/i18n/decNumber.h ++++ b/source/i18n/decNumber.h +@@ -86,7 +86,7 @@ + /* range: -1999999997 through 999999999 */ + uint8_t bits; /* Indicator bits (see above) */ + /* Coefficient, from least significant unit */ +- decNumberUnit lsu[DECNUMUNITS]; ++ decNumberUnit lsu[DECNUMUNITS+2]; + } decNumber; + + /* Notes: */ +diff --git a/source/i18n/rbt_pars.cpp b/source/i18n/rbt_pars.cpp +index 10482d5edb1..c59a22faab2 100644 +--- a/source/i18n/rbt_pars.cpp ++++ b/source/i18n/rbt_pars.cpp +@@ -552,16 +552,15 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l + case ALT_FUNCTION: + { + int32_t iref = pos; +- TransliteratorIDParser::SingleID* single = +- TransliteratorIDParser::parseFilterID(rule, iref); ++ LocalPointer single( ++ TransliteratorIDParser::parseFilterID(rule, iref)); + // The next character MUST be a segment open +- if (single == nullptr || ++ if (single.isNull() || + !ICU_Utility::parseChar(rule, iref, SEGMENT_OPEN)) { + return syntaxError(U_INVALID_FUNCTION, rule, start, status); + } + + Transliterator *t = single->createInstance(); +- delete single; + if (t == nullptr) { + return syntaxError(U_INVALID_FUNCTION, rule, start, status); + } +diff --git a/source/i18n/tridpars.cpp b/source/i18n/tridpars.cpp +index 6c23a0dc902..f9c3c207025 100644 +--- a/source/i18n/tridpars.cpp ++++ b/source/i18n/tridpars.cpp +@@ -136,6 +136,7 @@ TransliteratorIDParser::parseSingleID(const UnicodeString& id, int32_t& pos, + specsB = parseFilterID(id, pos, true); + // Must close with a ')' + if (specsB == nullptr || !ICU_Utility::parseChar(id, pos, CLOSE_REV)) { ++ delete specsB; + delete specsA; + pos = start; + return nullptr; +diff --git a/source/i18n/usearch.cpp b/source/i18n/usearch.cpp +index 6d9b60cef72..1fb82fe26a4 100644 +--- a/source/i18n/usearch.cpp ++++ b/source/i18n/usearch.cpp +@@ -199,6 +199,7 @@ inline int32_t * addTouint32_tArray(int32_t *destination, + int32_t *temp = (int32_t *)allocateMemory( + sizeof(int32_t) * newlength, status); + if (U_FAILURE(*status)) { ++ uprv_free(temp); + return nullptr; + } + uprv_memcpy(temp, destination, sizeof(int32_t) * (size_t)offset); +@@ -240,6 +241,7 @@ inline int64_t * addTouint64_tArray(int64_t *destination, + sizeof(int64_t) * newlength, status); + + if (U_FAILURE(*status)) { ++ uprv_free(temp); + return nullptr; + } + +diff --git a/source/i18n/uspoof_impl.cpp b/source/i18n/uspoof_impl.cpp +index 7a6084a1096..a1bd7d66a92 100644 +--- a/source/i18n/uspoof_impl.cpp ++++ b/source/i18n/uspoof_impl.cpp +@@ -194,8 +194,12 @@ void SpoofImpl::setAllowedLocales(const char *localesList, UErrorCode &status) { + + // Store the updated spoof checker state. + tmpSet = allowedChars.clone(); ++ if (tmpSet == nullptr) { ++ status = U_MEMORY_ALLOCATION_ERROR; ++ return; ++ } + const char *tmpLocalesList = uprv_strdup(localesList); +- if (tmpSet == nullptr || tmpLocalesList == nullptr) { ++ if (tmpLocalesList == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } +diff --git a/source/tools/gensprep/store.c b/source/tools/gensprep/store.c +index c3712febb4c..377877c94be 100644 +--- a/source/tools/gensprep/store.c ++++ b/source/tools/gensprep/store.c +@@ -638,7 +638,6 @@ extern void + cleanUpData(void) { + uprv_free(mappingData); + utrie_close(sprepTrie); +- uprv_free(sprepTrie); + } + + #endif /* #if !UCONFIG_NO_IDNA */ +diff --git a/source/tools/makeconv/genmbcs.cpp b/source/tools/makeconv/genmbcs.cpp +index 43b96d814fb..0f610afeee4 100644 +--- a/source/tools/makeconv/genmbcs.cpp ++++ b/source/tools/makeconv/genmbcs.cpp +@@ -173,6 +173,10 @@ MBCSOpen(UCMFile *ucm) { + } + + MBCSInit(mbcsData, ucm); ++ /* The memory in the MBSData structure following ++ * newConverter will be properly freed in MBCSClose. ++ */ ++ /* coverity[leaked_storage] */ + return &mbcsData->newConverter; + } + +diff --git a/source/tools/pkgdata/pkgtypes.c b/source/tools/pkgdata/pkgtypes.c +index 26bd945df73..ba516861a01 100644 +--- a/source/tools/pkgdata/pkgtypes.c ++++ b/source/tools/pkgdata/pkgtypes.c +@@ -31,6 +31,7 @@ const char *pkg_writeCharListWrap(FileStream *s, CharList *l, const char *delim, + { + int32_t ln = 0; + char buffer[1024]; ++ char *bufferp = buffer; + while(l != NULL) + { + if(l->str) +@@ -43,7 +44,7 @@ const char *pkg_writeCharListWrap(FileStream *s, CharList *l, const char *delim, + buffer[uprv_strlen(buffer)-1] = '\0'; + } + if(buffer[0] == '"') { +- uprv_strcpy(buffer, buffer+1); ++ bufferp = buffer+1; + } + } else if(quote > 0) { /* add quotes */ + if(l->str[0] != '"') { +@@ -54,7 +55,7 @@ const char *pkg_writeCharListWrap(FileStream *s, CharList *l, const char *delim, + uprv_strcat(buffer, "\""); + } + } +- T_FileStream_write(s, buffer, (int32_t)uprv_strlen(buffer)); ++ T_FileStream_write(s, bufferp, (int32_t)uprv_strlen(bufferp)); + + ln += (int32_t)uprv_strlen(l->str); + } +@@ -75,7 +76,8 @@ const char *pkg_writeCharListWrap(FileStream *s, CharList *l, const char *delim, + + const char *pkg_writeCharList(FileStream *s, CharList *l, const char *delim, int32_t quote) + { +- char buffer[1024]; ++ char buffer[1026]; /* 1026 instead of 1024 because quotes may be added */ ++ char *bufferp = buffer; + while(l != NULL) + { + if(l->str) +@@ -93,7 +95,7 @@ const char *pkg_writeCharList(FileStream *s, CharList *l, const char *delim, int + buffer[uprv_strlen(buffer)-1] = '\0'; + } + if(buffer[0] == '"') { +- uprv_strcpy(buffer, buffer+1); ++ bufferp = buffer+1; + } + } else if(quote > 0) { /* add quotes */ + if(l->str[0] != '"') { +@@ -104,7 +106,7 @@ const char *pkg_writeCharList(FileStream *s, CharList *l, const char *delim, int + uprv_strcat(buffer, "\""); + } + } +- T_FileStream_write(s, buffer, (int32_t)uprv_strlen(buffer)); ++ T_FileStream_write(s, bufferp, (int32_t)uprv_strlen(bufferp)); + } + + if(l->next && delim) +diff --git a/source/tools/toolutil/filetools.cpp b/source/tools/toolutil/filetools.cpp +index 994d8e31f00..8dcbb6a480a 100644 +--- a/source/tools/toolutil/filetools.cpp ++++ b/source/tools/toolutil/filetools.cpp +@@ -64,6 +64,7 @@ isFileModTimeLater(const char *filePath, const char *checkAgainst, UBool isDir) + newpath.append(dirEntry->d_name, -1, status); + if (U_FAILURE(status)) { + fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, u_errorName(status)); ++ closedir(pDir); + return false; + } + +-- +2.46.1 + diff --git a/SOURCES/0002-Fix-coverity-warnings-icu-74.2.patch b/SOURCES/0002-Fix-coverity-warnings-icu-74.2.patch new file mode 100644 index 0000000..9e6eb3a --- /dev/null +++ b/SOURCES/0002-Fix-coverity-warnings-icu-74.2.patch @@ -0,0 +1,487 @@ +From ac0192d1de167e11f2d8a28e2781941be4f60877 Mon Sep 17 00:00:00 2001 +From: Mike FABIAN +Date: Mon, 19 Aug 2024 16:15:01 +0200 +Subject: [PATCH 2/2] Fix coverity warnings icu-74.2 + +--- + source/common/loclikelysubtags.cpp | 1 + + source/common/ubidi.cpp | 1 + + source/common/ubiditransform.cpp | 2 +- + source/common/ucnv.cpp | 3 ++- + source/common/ucnv2022.cpp | 2 ++ + source/common/ucnv_u16.cpp | 2 ++ + source/common/ucnv_u7.cpp | 1 + + source/common/ucnvmbcs.cpp | 1 + + source/common/ucnvscsu.cpp | 2 ++ + source/common/umutablecptrie.cpp | 1 + + source/common/unames.cpp | 1 + + source/i18n/collationrootelements.cpp | 2 ++ + source/i18n/dayperiodrules.cpp | 1 + + source/i18n/double-conversion-bignum.cpp | 3 +++ + source/i18n/measfmt.cpp | 1 + + source/i18n/measunit.cpp | 3 +++ + source/i18n/number_fluent.cpp | 1 + + source/i18n/number_padding.cpp | 1 + + source/i18n/number_rounding.cpp | 2 ++ + source/i18n/number_skeletons.cpp | 1 + + source/i18n/numrange_fluent.cpp | 1 + + source/i18n/plurrule.cpp | 1 + + source/i18n/rbt_pars.cpp | 1 + + source/i18n/tzgnames.cpp | 1 + + source/i18n/vtzone.cpp | 2 +- + source/tools/gencnval/gencnval.c | 5 +++++ + source/tools/genrb/wrtxml.cpp | 2 +- + source/tools/makeconv/makeconv.cpp | 4 ++++ + source/tools/toolutil/package.cpp | 1 + + source/tools/toolutil/ucbuf.cpp | 2 +- + 30 files changed, 47 insertions(+), 5 deletions(-) + +diff --git a/source/common/loclikelysubtags.cpp b/source/common/loclikelysubtags.cpp +index c2a7011b509..7943b6d2489 100644 +--- a/source/common/loclikelysubtags.cpp ++++ b/source/common/loclikelysubtags.cpp +@@ -736,6 +736,7 @@ int32_t XLikelySubtags::getLikelyIndex(const char *language, const char *script) + int32_t value; + // Small optimization: Array lookup for first language letter. + int32_t c0; ++ /* coverity[overrun-local] */ + if (0 <= (c0 = uprv_lowerOrdinal(language[0])) && c0 <= 25 && + language[1] != 0 && // language.length() >= 2 + (state = trieFirstLetterStates[c0]) != 0) { +diff --git a/source/common/ubidi.cpp b/source/common/ubidi.cpp +index fcf82fa97a8..18a179a15f7 100644 +--- a/source/common/ubidi.cpp ++++ b/source/common/ubidi.cpp +@@ -1276,6 +1276,7 @@ resolveExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { + } else + /* make it WS so that it is handled by adjustWSLevels() */ + dirProps[i]=WS; ++ /* coverity[overrun-local] */ + embeddingLevel=(UBiDiLevel)stack[stackLast]&~ISOLATE; + flags|=(DIRPROP_FLAG(ON)|DIRPROP_FLAG_LR(embeddingLevel)); + previousLevel=embeddingLevel; +diff --git a/source/common/ubiditransform.cpp b/source/common/ubiditransform.cpp +index 01f5901a2c2..23634742b88 100644 +--- a/source/common/ubiditransform.cpp ++++ b/source/common/ubiditransform.cpp +@@ -499,7 +499,7 @@ ubiditransform_transform(UBiDiTransform *pBiDiTransform, + /* Checking for U_SUCCESS() within the loop to bail out on first failure. */ + for (action = pBiDiTransform->pActiveScheme->actions; *action && U_SUCCESS(*pErrorCode); action++) { + if ((*action)(pBiDiTransform, pErrorCode)) { +- if (action + 1) { ++ if (action[1] != nullptr) { + updateSrc(pBiDiTransform, pBiDiTransform->dest, *pBiDiTransform->pDestLength, + *pBiDiTransform->pDestLength, pErrorCode); + } +diff --git a/source/common/ucnv.cpp b/source/common/ucnv.cpp +index a7a07d65d61..87b4cd8ace5 100644 +--- a/source/common/ucnv.cpp ++++ b/source/common/ucnv.cpp +@@ -105,7 +105,7 @@ ucnv_openU (const char16_t * name, + *err = U_ILLEGAL_ARGUMENT_ERROR; + return nullptr; + } +- return ucnv_open(u_austrcpy(asciiName, name), err); ++ return ucnv_open(u_austrncpy(asciiName, name, UCNV_MAX_CONVERTER_NAME_LENGTH), err); + } + + /* Copy the string that is represented by the UConverterPlatform enum +@@ -2240,6 +2240,7 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv, + } + + /* The pivot buffer is empty; reset it so we start at pivotStart. */ ++ /* coverity[escape_local_addr_alias] */ + *pivotSource=*pivotTarget=pivotStart; + + /* +diff --git a/source/common/ucnv2022.cpp b/source/common/ucnv2022.cpp +index 5989c1b405a..7d5b450d78a 100644 +--- a/source/common/ucnv2022.cpp ++++ b/source/common/ucnv2022.cpp +@@ -3108,6 +3108,7 @@ UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args + } else { + /* GB2312_1 or ISO-IR-165 */ + U_ASSERT(cs0myConverterArray[cs0], + sourceChar, +@@ -3392,6 +3393,7 @@ UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, + + }else{ + U_ASSERT(tempStatemyConverterArray[tempState]; + tempBuf[0] = (char) (mySourceChar); + tempBuf[1] = (char) trailByte; +diff --git a/source/common/ucnv_u16.cpp b/source/common/ucnv_u16.cpp +index c3bcfef50cb..70dfbe89884 100644 +--- a/source/common/ucnv_u16.cpp ++++ b/source/common/ucnv_u16.cpp +@@ -234,6 +234,7 @@ _UTF16BEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, + + if(length>0) { + /* output length bytes with overflow (length>targetCapacity>0) */ ++ /* coverity[uninit_use_in_call] */ + ucnv_fromUWriteBytes(cnv, + overflow, length, + (char **)&target, pArgs->targetLimit, +@@ -835,6 +836,7 @@ _UTF16LEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, + + if(length>0) { + /* output length bytes with overflow (length>targetCapacity>0) */ ++ /* coverity[uninit_use_in_call] */ + ucnv_fromUWriteBytes(cnv, + overflow, length, + &target, pArgs->targetLimit, +diff --git a/source/common/ucnv_u7.cpp b/source/common/ucnv_u7.cpp +index 398b528e832..6df77253b12 100644 +--- a/source/common/ucnv_u7.cpp ++++ b/source/common/ucnv_u7.cpp +@@ -617,6 +617,7 @@ _UTF7FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, + base64Counter=1; + break; + case 1: ++ /* coverity[deref_overflow] */ + *target++=toBase64[bits|(c>>14)]; + if(target>8)&0x3f]; +diff --git a/source/common/ucnvmbcs.cpp b/source/common/ucnvmbcs.cpp +index d7606039800..9277ad25837 100644 +--- a/source/common/ucnvmbcs.cpp ++++ b/source/common/ucnvmbcs.cpp +@@ -2839,6 +2839,7 @@ ucnv_MBCSToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, + /* Back out bytes from the previous buffer: Need to replay them. */ + cnv->preToULength=(int8_t)(bytesFromThisBuffer-backOutDistance); + /* preToULength is negative! */ ++ /* coverity[overflow_sink] */ + uprv_memcpy(cnv->preToU, bytes+i, -cnv->preToULength); + source=(const uint8_t *)pArgs->source; + } +diff --git a/source/common/ucnvscsu.cpp b/source/common/ucnvscsu.cpp +index 2138e289cad..30a1b69824b 100644 +--- a/source/common/ucnvscsu.cpp ++++ b/source/common/ucnvscsu.cpp +@@ -402,6 +402,7 @@ _SCSUToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, + case quoteOne: + if(b<0x80) { + /* all static offsets are in the BMP */ ++ /* coverity[deref_overflow] */ + *target++=(char16_t)(staticOffsets[quoteWindow]+b); + if(offsets!=nullptr) { + *offsets++=sourceIndex; +@@ -642,6 +643,7 @@ _SCSUToUnicode(UConverterToUnicodeArgs *pArgs, + *target++=(char16_t)b; + } else { + /* write from dynamic window */ ++ /* coverity[deref_overflow] */ + uint32_t c=scsu->toUDynamicOffsets[dynamicWindow]+(b&0x7f); + if(c<=0xffff) { + *target++=(char16_t)c; +diff --git a/source/common/umutablecptrie.cpp b/source/common/umutablecptrie.cpp +index e58ab6f4897..502dfad5a50 100644 +--- a/source/common/umutablecptrie.cpp ++++ b/source/common/umutablecptrie.cpp +@@ -534,6 +534,7 @@ void MutableCodePointTrie::setRange(UChar32 start, UChar32 end, uint32_t value, + // Iterate over all-value blocks. + while (start < limit) { + int32_t i = start >> UCPTRIE_SHIFT_3; ++ /* coverity[overrun-local] */ + if (flags[i] == ALL_SAME) { + index[i] = value; + } else /* MIXED */ { +diff --git a/source/common/unames.cpp b/source/common/unames.cpp +index 1b3192bf25e..c01c9d2db04 100644 +--- a/source/common/unames.cpp ++++ b/source/common/unames.cpp +@@ -1561,6 +1561,7 @@ u_charFromName(UCharNameChoice nameChoice, + + /* try extended names first */ + if (lower[0] == '<') { ++ /* coverity[deref_overflow] */ + if (nameChoice == U_EXTENDED_CHAR_NAME && lower[--i] == '>') { + // Parse a string like "" where HHHH is a hex code point. + uint32_t limit = i; +diff --git a/source/i18n/collationrootelements.cpp b/source/i18n/collationrootelements.cpp +index 9b46d14144b..54fa479617a 100644 +--- a/source/i18n/collationrootelements.cpp ++++ b/source/i18n/collationrootelements.cpp +@@ -127,6 +127,7 @@ CollationRootElements::getSecondaryBefore(uint32_t p, uint32_t s) const { + } else { + index = findPrimary(p) + 1; + previousSec = Collation::BEFORE_WEIGHT16; ++ /* coverity[overflow_sink] */ + sec = getFirstSecTerForPrimary(index) >> 16; + } + U_ASSERT(s >= sec); +@@ -157,6 +158,7 @@ CollationRootElements::getTertiaryBefore(uint32_t p, uint32_t s, uint32_t t) con + } else { + index = findPrimary(p) + 1; + previousTer = Collation::BEFORE_WEIGHT16; ++ /* coverity[overflow_sink] */ + secTer = getFirstSecTerForPrimary(index); + } + uint32_t st = (s << 16) | t; +diff --git a/source/i18n/dayperiodrules.cpp b/source/i18n/dayperiodrules.cpp +index 294390cce2b..95befe8301c 100644 +--- a/source/i18n/dayperiodrules.cpp ++++ b/source/i18n/dayperiodrules.cpp +@@ -218,6 +218,7 @@ struct DayPeriodRulesDataSink : public ResourceSink { + } + if (hour == 25) { hour = 0; } + if (cutoffs[hour] & (1 << CUTOFF_TYPE_BEFORE)) { ++ /* coverity[overrun-call] */ + rule.add(startHour, hour, period); + break; + } +diff --git a/source/i18n/double-conversion-bignum.cpp b/source/i18n/double-conversion-bignum.cpp +index d2b701a21d8..77bab875aab 100644 +--- a/source/i18n/double-conversion-bignum.cpp ++++ b/source/i18n/double-conversion-bignum.cpp +@@ -390,6 +390,7 @@ void Bignum::Square() { + // First shift the digits so we don't overwrite them. + const int copy_offset = used_bigits_; + for (int i = 0; i < used_bigits_; ++i) { ++ /* coverity[overrun-call] */ + RawBigit(copy_offset + i) = RawBigit(i); + } + // We have two loops to avoid some 'if's in the loop. +@@ -415,7 +416,9 @@ void Bignum::Square() { + // Invariant: sum of both indices is again equal to i. + // Inner loop runs 0 times on last iteration, emptying accumulator. + while (bigit_index2 < used_bigits_) { ++ /* coverity[overrun-call] */ + const Chunk chunk1 = RawBigit(copy_offset + bigit_index1); ++ /* coverity[overrun-call] */ + const Chunk chunk2 = RawBigit(copy_offset + bigit_index2); + accumulator += static_cast(chunk1) * chunk2; + bigit_index1--; +diff --git a/source/i18n/measfmt.cpp b/source/i18n/measfmt.cpp +index da4e69b49b7..09be56fcf33 100644 +--- a/source/i18n/measfmt.cpp ++++ b/source/i18n/measfmt.cpp +@@ -516,6 +516,7 @@ UnicodeString &MeasureFormat::formatMeasurePerUnit( + .formatImpl(&result, status); + } + DecimalFormat::fieldPositionHelper(result, pos, appendTo.length(), status); ++ /* coverity[uninit_use_in_call] */ + appendTo.append(result.toTempString(status)); + return appendTo; + } +diff --git a/source/i18n/measunit.cpp b/source/i18n/measunit.cpp +index abb21997705..bff3e6273af 100644 +--- a/source/i18n/measunit.cpp ++++ b/source/i18n/measunit.cpp +@@ -2230,6 +2230,7 @@ const char *MeasureUnit::getSubtype() const { + } + + const char *MeasureUnit::getIdentifier() const { ++ /* coverity[negative_returns] */ + return fImpl ? fImpl->identifier.data() : gSubTypes[getOffset()]; + } + +@@ -2340,6 +2341,7 @@ void MeasureUnit::initTime(const char *timeId) { + int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "duration"); + U_ASSERT(result != -1); + fTypeId = result; ++ /* coverity[negative_returns] */ + result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], timeId); + U_ASSERT(result != -1); + fSubTypeId = result - gOffsets[fTypeId]; +@@ -2349,6 +2351,7 @@ void MeasureUnit::initCurrency(StringPiece isoCurrency) { + int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "currency"); + U_ASSERT(result != -1); + fTypeId = result; ++ /* coverity[negative_returns] */ + result = binarySearch( + gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], isoCurrency); + if (result == -1) { +diff --git a/source/i18n/number_fluent.cpp b/source/i18n/number_fluent.cpp +index 45d6b06c6df..e6fe49f0dca 100644 +--- a/source/i18n/number_fluent.cpp ++++ b/source/i18n/number_fluent.cpp +@@ -466,6 +466,7 @@ LocalizedNumberFormatter::LocalizedNumberFormatter(LocalizedNumberFormatter&& sr + + LocalizedNumberFormatter::LocalizedNumberFormatter(NFS&& src) noexcept + : NFS(std::move(src)) { ++ // coverity[use_after_move] + lnfMoveHelper(std::move(static_cast(src))); + } + +diff --git a/source/i18n/number_padding.cpp b/source/i18n/number_padding.cpp +index c320c3ffb6f..3aa996f932f 100644 +--- a/source/i18n/number_padding.cpp ++++ b/source/i18n/number_padding.cpp +@@ -29,6 +29,7 @@ addPaddingHelper(UChar32 paddingCp, int32_t requiredPadding, FormattedStringBuil + } + + Padder::Padder(UChar32 cp, int32_t width, UNumberFormatPadPosition position) : fWidth(width) { ++ fUnion.errorCode = U_ZERO_ERROR; /* avoid coverity warning: "fUnion uninitialized" */ + // TODO(13034): Consider making this a string instead of code point. + fUnion.padding.fCp = cp; + fUnion.padding.fPosition = position; +diff --git a/source/i18n/number_rounding.cpp b/source/i18n/number_rounding.cpp +index e6bb509ffd7..d9fe7d74275 100644 +--- a/source/i18n/number_rounding.cpp ++++ b/source/i18n/number_rounding.cpp +@@ -284,6 +284,7 @@ FractionPrecision Precision::constructFraction(int32_t minFrac, int32_t maxFrac) + settings.fMinSig = -1; + settings.fMaxSig = -1; + PrecisionUnion union_; ++ /* coverity[uninit_use] */ + union_.fracSig = settings; + return {RND_FRACTION, union_}; + } +@@ -295,6 +296,7 @@ Precision Precision::constructSignificant(int32_t minSig, int32_t maxSig) { + settings.fMinSig = static_cast(minSig); + settings.fMaxSig = static_cast(maxSig); + PrecisionUnion union_; ++ /* coverity[uninit_use] */ + union_.fracSig = settings; + return {RND_SIGNIFICANT, union_}; + } +diff --git a/source/i18n/number_skeletons.cpp b/source/i18n/number_skeletons.cpp +index ef3befbffad..d790db5b92d 100644 +--- a/source/i18n/number_skeletons.cpp ++++ b/source/i18n/number_skeletons.cpp +@@ -545,6 +545,7 @@ MacroProps skeleton::parseSkeleton( + segment.resetLength(); + if (U_FAILURE(status)) { + errOffset = segment.getOffset(); ++ /* coverity[uninit_use_in_call] */ + return macros; + } + +diff --git a/source/i18n/numrange_fluent.cpp b/source/i18n/numrange_fluent.cpp +index 0944f3024ff..bdf179170a3 100644 +--- a/source/i18n/numrange_fluent.cpp ++++ b/source/i18n/numrange_fluent.cpp +@@ -239,6 +239,7 @@ LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(LocalizedNumberRang + LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(NFS&& src) noexcept + : NFS(std::move(src)) { + // Steal the compiled formatter ++ // coverity[use_after_move] + LNF&& _src = static_cast(src); + auto* stolen = _src.fAtomicFormatter.exchange(nullptr); + delete fAtomicFormatter.exchange(stolen); +diff --git a/source/i18n/plurrule.cpp b/source/i18n/plurrule.cpp +index 839d14147cc..cc842347875 100644 +--- a/source/i18n/plurrule.cpp ++++ b/source/i18n/plurrule.cpp +@@ -343,6 +343,7 @@ PluralRules::select(const number::impl::UFormattedNumberRangeData* impl, UErrorC + return ICU_Utility::makeBogusString(); + } + auto result = mStandardPluralRanges->resolve(form1, form2); ++ /* coverity[overrun-call] */ + return UnicodeString(StandardPlural::getKeyword(result), -1, US_INV); + } + +diff --git a/source/i18n/rbt_pars.cpp b/source/i18n/rbt_pars.cpp +index c59a22faab2..1a49eaf12fb 100644 +--- a/source/i18n/rbt_pars.cpp ++++ b/source/i18n/rbt_pars.cpp +@@ -1059,6 +1059,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, + setVariableRange(0xF000, 0xF8FF, status); + } + ++ /* coverity[overflow_sink] */ + if (resemblesPragma(rule, pos, limit)) { + int32_t ppp = parsePragma(rule, pos, limit, status); + if (ppp < 0) { +diff --git a/source/i18n/tzgnames.cpp b/source/i18n/tzgnames.cpp +index d55b0fd2ae0..1e14003b22b 100644 +--- a/source/i18n/tzgnames.cpp ++++ b/source/i18n/tzgnames.cpp +@@ -517,6 +517,7 @@ TZGNCore::getGenericLocationName(const UnicodeString& tzCanonicalID) { + char16_t tzIDKey[ZID_KEY_MAX + 1]; + int32_t tzIDKeyLen = tzCanonicalID.extract(tzIDKey, ZID_KEY_MAX + 1, status); + U_ASSERT(status == U_ZERO_ERROR); // already checked length above ++ /* coverity[negative_returns] */ + tzIDKey[tzIDKeyLen] = 0; + + const char16_t *locname = (const char16_t *)uhash_get(fLocationNamesMap, tzIDKey); +diff --git a/source/i18n/vtzone.cpp b/source/i18n/vtzone.cpp +index 25af556aa22..7b557f1dab8 100644 +--- a/source/i18n/vtzone.cpp ++++ b/source/i18n/vtzone.cpp +@@ -119,7 +119,7 @@ static UnicodeString& appendAsciiDigits(int32_t number, uint8_t length, UnicodeS + number *= -1; + } + +- length = length > 10 ? 10 : length; ++ length = (uint8_t)((length > 10) ? 10 : length); + if (length == 0) { + // variable length + i = 0; +diff --git a/source/tools/gencnval/gencnval.c b/source/tools/gencnval/gencnval.c +index 54b41fb57da..129cf1fc451 100644 +--- a/source/tools/gencnval/gencnval.c ++++ b/source/tools/gencnval/gencnval.c +@@ -273,6 +273,11 @@ main(int argc, char* argv[]) { + + const char* sourcedir = options[SOURCEDIR].value; + if (sourcedir != NULL && *sourcedir != 0) { ++ if (strlen(sourcedir) + strlen(path) + 1 >= 512) { ++ fprintf(stderr, ++ "Length of sourcedir + path is too long, must be <= 510.\n"); ++ exit(U_ILLEGAL_ARGUMENT_ERROR); ++ } + char *end; + uprv_strcpy(pathBuf, sourcedir); + end = uprv_strchr(pathBuf, 0); +diff --git a/source/tools/genrb/wrtxml.cpp b/source/tools/genrb/wrtxml.cpp +index 16f67fabcaf..cd0bb19bff7 100644 +--- a/source/tools/genrb/wrtxml.cpp ++++ b/source/tools/genrb/wrtxml.cpp +@@ -187,7 +187,7 @@ static void strnrepchr(char* src, int32_t srcLen, char s, char r){ + */ + static char* parseFilename(const char* id, char* /*lang*/) { + int idLen = (int) uprv_strlen(id); +- char* localeID = (char*) uprv_malloc(idLen); ++ char* localeID = (char*) uprv_malloc(idLen+1); + int pos = 0; + int canonCapacity = 0; + char* canon = nullptr; +diff --git a/source/tools/makeconv/makeconv.cpp b/source/tools/makeconv/makeconv.cpp +index b14b4316f3b..e47033f7c59 100644 +--- a/source/tools/makeconv/makeconv.cpp ++++ b/source/tools/makeconv/makeconv.cpp +@@ -377,6 +377,10 @@ int main(int argc, char* argv[]) + data.staticData.name); + } + ++ if (strlen(cnvName) + 1 > UPRV_LENGTHOF(data.staticData.name)) { ++ fprintf(stderr, "converter name %s too long\n", cnvName); ++ return U_BUFFER_OVERFLOW_ERROR; ++ } + uprv_strcpy((char*)data.staticData.name, cnvName); + + if(!uprv_isInvariantString((char*)data.staticData.name, -1)) { +diff --git a/source/tools/toolutil/package.cpp b/source/tools/toolutil/package.cpp +index 3098f5d57d4..3bd28e48ac1 100644 +--- a/source/tools/toolutil/package.cpp ++++ b/source/tools/toolutil/package.cpp +@@ -865,6 +865,7 @@ Package::writePackage(const char *filename, char outType, const char *comment) { + // write the items + for(pItem=items, i=0; itype); ++ /* coverity[negative_returns] */ + if(ds[type]!=nullptr) { + // swap each item from its platform properties to the desired ones + udata_swap( +diff --git a/source/tools/toolutil/ucbuf.cpp b/source/tools/toolutil/ucbuf.cpp +index 1eb54e260e6..1999433b003 100644 +--- a/source/tools/toolutil/ucbuf.cpp ++++ b/source/tools/toolutil/ucbuf.cpp +@@ -257,7 +257,7 @@ ucbuf_fillucbuf( UCHARBUF* buf,UErrorCode* error){ + + /* for post-context */ + start = pos+len; +- stop = (int32_t)(((pos+CONTEXT_LEN)<= (sourceLimit-cbuf) )? (pos+(CONTEXT_LEN-1)) : (sourceLimit-cbuf)); ++ stop = (int32_t)(((pos+CONTEXT_LEN)<= (int32_t)(sourceLimit-cbuf) )? (pos+(CONTEXT_LEN-1)) : (int32_t)(sourceLimit-cbuf)); + + memcpy(postContext,source,stop-start); + /* null terminate the buffer */ +-- +2.46.2 + diff --git a/SOURCES/gennorm2-man.patch b/SOURCES/gennorm2-man.patch new file mode 100644 index 0000000..07b5b9d --- /dev/null +++ b/SOURCES/gennorm2-man.patch @@ -0,0 +1,128 @@ +Description: supply manual page for program that doesn't have one +Author: Jay Berkenbilt +Bug: http://bugs.icu-project.org/trac/ticket/7554 + +diff -r -u -N icu.orig/source/tools/gennorm2/gennorm2.8.in icu/source/tools/gennorm2/gennorm2.8.in +--- icu.orig/source/tools/gennorm2/gennorm2.8.in 1970-01-01 01:00:00.000000000 +0100 ++++ icu/source/tools/gennorm2/gennorm2.8.in 2013-02-25 16:43:28.297062638 +0100 +@@ -0,0 +1,71 @@ ++.\" Hey, Emacs! This is -*-nroff-*- you know... ++.\" ++.\" gennorm2.8: manual page for the gennorm2 utility ++.\" ++.\" Copyright (C) 2005-2006 International Business Machines Corporation and others ++.\" ++.TH GENNORM2 8 "15 March 2010" "ICU MANPAGE" "ICU @VERSION@ Manual" ++.SH NAME ++.B gennorm2 ++\- Builds binary data file with Unicode normalization data. ++.SH SYNOPSIS ++.B gennorm2 ++[ ++.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" ++] ++[ ++.BR "\-V\fP, \fB\-\-version" ++] ++[ ++.BR "\-c\fP, \fB\-\-copyright" ++] ++[ ++.BR "\-v\fP, \fB\-\-verbose" ++] ++[ ++.BI "\-u\fP, \fB\-\-unicode" " unicode\-version\-number" ++] ++[ ++.BI "\-s\fP, \fB\-\-sourcedir" " source\-directory" ++] ++[ ++.BI "\-o\fP, \fB\-\-output" " output\-filename" ++] ++.BI "\fB\-\-fast" ++.SH DESCRIPTION ++.B gennorm2 ++reads text files that define Unicode normalization, ++them, and builds a binary data file. ++.SH OPTIONS ++.TP ++.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" ++Print help about usage and exit. ++.TP ++.BR "\-V\fP, \fB\-\-version" ++Print the version of ++.B gennorm2 ++and exit. ++.TP ++.BR "\-c\fP, \fB\-\-copyright" ++Include a copyright notice. ++.TP ++.BR "\-v\fP, \fB\-\-verbose" ++Display extra informative messages during execution. ++.TP ++.BR "\-u\fP, \fB\-\-unicode" ++Specify Unicode version number, such as 5.2.0. ++.TP ++.BI "\-s\fP, \fB\-\-sourcedir" " source\-directory" ++Specify the input directory. ++.TP ++.BI "\-s\fP, \fB\-\-sourcedir" " source\-directory" ++Set the name of the output file. ++.TP ++.BI "\fB\-\-fast" ++optimize the .nrm file for fast normalization, ++which might increase its size (Writes fully decomposed ++regular mappings instead of delta mappings. ++You should measure the runtime speed to make sure that ++this is a good trade-off.) ++.SH COPYRIGHT ++Copyright (C) 2009-2010 International Business Machines Corporation and others +diff -r -u -N icu.orig/source/tools/gennorm2/Makefile.in icu/source/tools/gennorm2/Makefile.in +--- icu.orig/source/tools/gennorm2/Makefile.in 2013-01-11 01:23:32.000000000 +0100 ++++ icu/source/tools/gennorm2/Makefile.in 2013-02-25 16:43:28.296062632 +0100 +@@ -16,8 +16,13 @@ + + TARGET_STUB_NAME = gennorm2 + ++SECTION = 8 ++ ++MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) ++ ++ + ## Extra files to remove for 'make clean' +-CLEANFILES = *~ $(DEPS) ++CLEANFILES = *~ $(DEPS) $(MAN_FILES) + + ## Target information + TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) +@@ -44,12 +49,16 @@ + dist: dist-local + check: all check-local + +-all-local: $(TARGET) ++all-local: $(TARGET) $(MAN_FILES) + +-install-local: all-local ++install-local: all-local install-man + $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) + $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) + ++install-man: $(MAN_FILES) ++ $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) ++ $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) ++ + dist-local: + + clean-local: +@@ -70,6 +79,11 @@ + $(POST_BUILD_STEP) + + ++%.$(SECTION): $(srcdir)/%.$(SECTION).in ++ cd $(top_builddir) \ ++ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status ++ ++ + ifeq (,$(MAKECMDGOALS)) + -include $(DEPS) + else diff --git a/SOURCES/icu-config.sh b/SOURCES/icu-config.sh new file mode 100644 index 0000000..5779637 --- /dev/null +++ b/SOURCES/icu-config.sh @@ -0,0 +1,11 @@ +#!/bin/sh +OOO_ARCH=$(uname -m) +case $OOO_ARCH in + x86_64 | s390x | ppc64 | sparc64 | aarch64 | ppc64le | mips64 | mips64el | riscv64) + bits=64 + ;; + * ) + bits=32 + ;; +esac +exec icu-config-$bits "$@" diff --git a/SOURCES/icuinfo-man.patch b/SOURCES/icuinfo-man.patch new file mode 100644 index 0000000..987e879 --- /dev/null +++ b/SOURCES/icuinfo-man.patch @@ -0,0 +1,145 @@ +Description: supply manual page for program that doesn't have one +Author: Jay Berkenbilt +Bug: http://bugs.icu-project.org/trac/ticket/7665 +erAck: adapted to ICU 56.1 icu/source/tools/icuinfo/Makefile.in + +diff -Nur orig.icu/source/tools/icuinfo/icuinfo.1.in icu/source/tools/icuinfo/icuinfo.1.in +--- orig.icu/source/tools/icuinfo/icuinfo.1.in 1970-01-01 01:00:00.000000000 +0100 ++++ icu/source/tools/icuinfo/icuinfo.1.in 2015-10-27 19:19:35.184056800 +0100 +@@ -0,0 +1,76 @@ ++.\" Hey, Emacs! This is -*-nroff-*- you know... ++.\" ++.\" icuinfo.1: manual page for the icuinfo utility ++.\" ++.\" Copyright (C) 2005-2006 International Business Machines Corporation and others ++.\" ++.TH ICUINFO 1 "1 May 2010" "ICU MANPAGE" "ICU @VERSION@ Manual" ++.SH NAME ++.B icuinfo ++\- Shows some basic info about the current ICU ++.SH SYNOPSIS ++.B icuinfo ++[ ++.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" ++] ++[ ++.BR "\-V\fP, \fB\-\-version" ++] ++[ ++.BR "\-c\fP, \fB\-\-copyright" ++] ++[ ++.BI "\-i\fP, \fB\-\-icudatadir" " directory" ++] ++[ ++.BR "\-v\fP, \fB\-\-verbose" ++] ++[ ++.BI "\-L\fP, \fB\-\-list-plugins" ++] ++[ ++.BI "\-m\fP, \fB\-\-milisecond-time" ++] ++[ ++.BI "\-K\fP, \fB\-\-cleanup" ++] ++.SH DESCRIPTION ++.B icuinfo ++prints basic information about the current version of ICU. ++.SH OPTIONS ++.TP ++.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" ++Print help about usage and exit. ++.TP ++.BR "\-V\fP, \fB\-\-version" ++Print the version of ++.B icuinfo ++and exit. ++.TP ++.BR "\-c\fP, \fB\-\-copyright" ++Embeds the standard ICU copyright into the ++.IR output-file . ++.TP ++.BR "\-v\fP, \fB\-\-verbose" ++Display extra informative messages during execution. ++.TP ++.BI "\-i\fP, \fB\-\-icudatadir" " directory" ++Look for any necessary ICU data files in ++.IR directory . ++For example, the file ++.B pnames.icu ++must be located when ICU's data is not built as a shared library. ++The default ICU data directory is specified by the environment variable ++.BR ICU_DATA . ++Most configurations of ICU do not require this argument. ++.TP ++.BI "\-L\fP, \fB\-\-list-plugins" ++If specified, list and diagnose issues with ICU plugins. ++.TP ++.BI "\-K\fP, \fB\-\-cleanup" ++Attempt to unload plugins before exiting. ++.TP ++.BI "\-m\fP, \fB\-\-milisecond-time" ++Print the current UTC time in milliseconds. ++.SH COPYRIGHT ++Copyright (C) 2010 International Business Machines Corporation and others +diff -Nur orig.icu/source/tools/icuinfo/Makefile.in icu/source/tools/icuinfo/Makefile.in +--- orig.icu/source/tools/icuinfo/Makefile.in 2015-10-08 05:53:56.000000000 +0200 ++++ icu/source/tools/icuinfo/Makefile.in 2015-10-27 19:23:19.115509906 +0100 +@@ -14,8 +14,15 @@ + ## Build directory information + subdir = tools/icuinfo + ++TARGET_STUB_NAME = icuinfo ++ ++SECTION = 1 ++ ++MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) ++ ++ + ## Extra files to remove for 'make clean' +-CLEANFILES = *~ $(DEPS) $(PLUGIN_OBJECTS) $(PLUGINFILE) $(PLUGIN) ++CLEANFILES = *~ $(DEPS) $(PLUGIN_OBJECTS) $(PLUGINFILE) $(PLUGIN) $(MAN_FILES) + + ## Target information + TARGET = icuinfo$(EXEEXT) +@@ -35,7 +42,8 @@ + + ## List of phony targets + .PHONY : all all-local install install-local clean clean-local \ +-distclean distclean-local dist dist-local check check-local plugin-check ++distclean distclean-local dist dist-local check check-local plugin-check \ ++install-man + + ## Clear suffix list + .SUFFIXES : +@@ -48,12 +56,16 @@ + dist: dist-local + check: all check-local + +-all-local: $(TARGET) ++all-local: $(TARGET) $(MAN_FILES) + +-install-local: all-local ++install-local: all-local install-man + $(MKINSTALLDIRS) $(DESTDIR)$(bindir) + $(INSTALL) $(TARGET) $(DESTDIR)$(bindir) + ++install-man: $(MAN_FILES) ++ $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) ++ $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) ++ + dist-local: + + clean-local: +@@ -103,6 +115,10 @@ + @echo "Plugins are disabled (use --enable-plugins to enable)" + endif + ++%.$(SECTION): $(srcdir)/%.$(SECTION).in ++ cd $(top_builddir) \ ++ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status ++ + ifeq (,$(MAKECMDGOALS)) + -include $(DEPS) + else diff --git a/SPECS/icu.spec b/SPECS/icu.spec new file mode 100644 index 0000000..2dab1e6 --- /dev/null +++ b/SPECS/icu.spec @@ -0,0 +1,871 @@ +#%%global debugtrace 1 + +# Set to 0 when upgrading to a new ICU release that contains up-to-date timezone data. +# (or update the timezone data update..). +%global use_tzdata_update 0 + +%define version_dash %{gsub %{version} %. -} +%define version_underscore %{gsub %{version} %. _} + +Name: icu +Version: 74.2 +Release: 3%{?dist} +Summary: International Components for Unicode + +License: Unicode-DFS-2016 AND BSD-2-Clause AND BSD-3-Clause AND LicenseRef-Fedora-Public-Domain +URL: http://site.icu-project.org/ +Source0: https://github.com/unicode-org/icu/releases/download/release-%{version_dash}/icu4c-%{version_underscore}-src-FIXED.tgz +%if 0%{?use_tzdata_update} +Source1: https://github.com/unicode-org/icu/releases/download/release-%{version_dash}/icu4c-%{version_underscore}-data.zip +Source2: https://raw.githubusercontent.com/unicode-org/icu-data/main/tzdata/icunew/2022b/44/metaZones.txt +Source3: https://raw.githubusercontent.com/unicode-org/icu-data/main/tzdata/icunew/2022b/44/timezoneTypes.txt +Source4: https://raw.githubusercontent.com/unicode-org/icu-data/main/tzdata/icunew/2022b/44/windowsZones.txt +Source5: https://raw.githubusercontent.com/unicode-org/icu-data/main/tzdata/icunew/2022b/44/zoneinfo64.txt +%endif +Source10: icu-config.sh + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: doxygen, autoconf, python3 +BuildRequires: make +Requires: lib%{name}%{?_isa} = %{version}-%{release} + +Patch4: gennorm2-man.patch +Patch5: icuinfo-man.patch + +Patch10: 0001-ICU-21667-Fix-coverity-warnings.patch +Patch11: 0002-Fix-coverity-warnings-icu-74.2.patch + +%description +Tools and utilities for developing with icu. + +%package -n lib%{name} +Summary: International Components for Unicode - libraries + +%description -n lib%{name} +The International Components for Unicode (ICU) libraries provide +robust and full-featured Unicode services on a wide variety of +platforms. ICU supports the most current version of the Unicode +standard, and they provide support for supplementary Unicode +characters (needed for GB 18030 repertoire support). +As computing environments become more heterogeneous, software +portability becomes more important. ICU lets you produce the same +results across all the various platforms you support, without +sacrificing performance. It offers great flexibility to extend and +customize the supplied services. + +%package -n lib%{name}-devel +Summary: Development files for International Components for Unicode +Requires: lib%{name}%{?_isa} = %{version}-%{release} +Requires: pkgconfig + +%description -n lib%{name}-devel +Includes and definitions for developing with icu. + +%package -n lib%{name}-doc +Summary: Documentation for International Components for Unicode +BuildArch: noarch + +%description -n lib%{name}-doc +%{summary}. + +%{!?endian: %global endian %(%{__python3} -c "import sys;print (0 if sys.byteorder=='big' else 1)")} +# " this line just fixes syntax highlighting for vim that is confused by the above and continues literal + + +%prep +%autosetup -p1 -n %{name} +%if 0%{?use_tzdata_update} +pushd source +unzip -o %{SOURCE1} +rm -f data/in/icudt*l.dat +cp -v -f %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} data/misc +popd +%endif + +%build +pushd source +autoconf +CFLAGS='%optflags -fno-strict-aliasing' +CXXFLAGS='%optflags -fno-strict-aliasing' +# Endian: BE=0 LE=1 +%if ! 0%{?endian} +CPPFLAGS='-DU_IS_BIG_ENDIAN=1' +%endif + +#rhbz856594 do not use --disable-renaming or cope with the mess +OPTIONS='--with-data-packaging=library --disable-samples' +%if 0%{?debugtrace} +OPTIONS=$OPTIONS' --enable-debug --enable-tracing' +%endif +%configure $OPTIONS + +#rhbz#225896 +sed -i 's|-nodefaultlibs -nostdlib||' config/mh-linux +#rhbz#813484 +sed -i 's| \$(docfilesdir)/installdox||' Makefile +# There is no source/doc/html/search/ directory +sed -i '/^\s\+\$(INSTALL_DATA) \$(docsrchfiles) \$(DESTDIR)\$(docdir)\/\$(docsubsrchdir)\s*$/d' Makefile +# rhbz#856594 The configure --disable-renaming and possibly other options +# result in icu/source/uconfig.h.prepend being created, include that content in +# icu/source/common/unicode/uconfig.h to propagate to consumer packages. +test -f uconfig.h.prepend && sed -e '/^#define __UCONFIG_H__/ r uconfig.h.prepend' -i common/unicode/uconfig.h + +# more verbosity for build.log +sed -i -r 's|(PKGDATA_OPTS = )|\1-v |' data/Makefile + +%make_build +%make_build doc + + +%install +rm -rf $RPM_BUILD_ROOT source/__docs +%make_install %{?_smp_mflags} -C source +make %{?_smp_mflags} -C source install-doc docdir=__docs +chmod +x $RPM_BUILD_ROOT%{_libdir}/*.so.* +( + cd $RPM_BUILD_ROOT%{_bindir} + mv icu-config icu-config-%{__isa_bits} +) +install -p -m755 -D %{SOURCE10} $RPM_BUILD_ROOT%{_bindir}/icu-config + + +%check +# test to ensure that -j(X>1) didn't "break" man pages. b.f.u #2357 +if grep -q @VERSION@ source/tools/*/*.8 source/tools/*/*.1 source/config/*.1; then + exit 1 +fi +%make_build -C source check + +# log available codes +pushd source +LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l + + +%files +%license license.html +%exclude %{_datadir}/%{name}/*/LICENSE +%{_bindir}/derb +%{_bindir}/genbrk +%{_bindir}/gencfu +%{_bindir}/gencnval +%{_bindir}/gendict +%{_bindir}/genrb +%{_bindir}/icuexportdata +%{_bindir}/makeconv +%{_bindir}/pkgdata +%{_bindir}/uconv +%{_sbindir}/* +%{_mandir}/man1/derb.1* +%{_mandir}/man1/genbrk.1* +%{_mandir}/man1/gencfu.1* +%{_mandir}/man1/gencnval.1* +%{_mandir}/man1/gendict.1* +%{_mandir}/man1/genrb.1* +%{_mandir}/man1/icuexportdata.1* +%{_mandir}/man1/makeconv.1* +%{_mandir}/man1/pkgdata.1* +%{_mandir}/man1/uconv.1* +%{_mandir}/man8/*.8* + +%files -n lib%{name} +%license LICENSE +%doc readme.html +%{_libdir}/*.so.* + +%files -n lib%{name}-devel +%license LICENSE +%doc source/samples/ +%{_bindir}/%{name}-config* +%{_bindir}/icuinfo +%{_mandir}/man1/%{name}-config.1* +%{_mandir}/man1/icuinfo.1* +%{_includedir}/unicode +%{_libdir}/*.so +%{_libdir}/pkgconfig/*.pc +%{_libdir}/%{name} +%dir %{_datadir}/%{name} +%dir %{_datadir}/%{name}/%{version} +%{_datadir}/%{name}/%{version}/install-sh +%{_datadir}/%{name}/%{version}/mkinstalldirs +%{_datadir}/%{name}/%{version}/config + +%files -n lib%{name}-doc +%license LICENSE +%doc readme.html +%doc source/__docs/%{name}/html/* + + +%changelog +* Fri Oct 25 2024 MSVSphere Packaging Team - 74.2-3 +- Rebuilt for MSVSphere 10 + +* Fri Sep 20 2024 Mike FABIAN - 74.2-3 +- Resolves: RHEL-59365 Fix coverity warnings + +* Mon Jun 24 2024 Troy Dawson - 74.2-2 +- Bump release for June 2024 mass rebuild + +* Wed Jan 31 2024 Pete Walter - 74.2-1 +- Update to 74.2 + +* Mon Jan 29 2024 Pete Walter - 74.1-1 +- Update to 74.1 + +* Wed Jan 24 2024 Fedora Release Engineering - 73.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Fedora Release Engineering - 73.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Dec 13 2023 Yaakov Selkowitz - 73.2-3 +- Fix broken TestHebrewCalendarInTemporalLeapYear + +* Thu Jul 20 2023 Fedora Release Engineering - 73.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Thu Jul 06 2023 Frantisek Zatloukal - 73.2-1 +- Update to 73.2 + +* Fri Jan 20 2023 Eike Rathke - 72.1-3 +- migrated to SPDX license IDs + +* Thu Jan 19 2023 Fedora Release Engineering - 72.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Dec 28 2022 Pete Walter - 72.1-1 +- Update to 72.1 + +* Fri Sep 23 2022 Mike FABIAN - 71.1-2 +- Update timezone data to 2022b + +* Wed Jul 27 2022 Frantisek Zatloukal - 71.1-1 +- Update to 71.1 + +* Thu Jul 21 2022 Fedora Release Engineering - 69.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu May 05 2022 Mike FABIAN - 69.1-6 +- Update timezone data to 2022a + +* Wed Feb 02 2022 Eike Rathke - 69.1-5 +- Introduce use_tzdata_update flag + +* Tue Feb 01 2022 Mike FABIAN - 69.1-4 +- Update timezone data to 2021a4 + +* Thu Jan 20 2022 Fedora Release Engineering - 69.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Jul 22 2021 Fedora Release Engineering - 69.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed May 19 2021 Pete Walter - 69.1-1 +- Update to 69.1 + +* Tue Mar 30 2021 Jonathan Wakely - 67.1-6 +- Rebuilt for removed libstdc++ symbol (#1937698) + +* Tue Jan 26 2021 Fedora Release Engineering - 67.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Jul 28 2020 Fedora Release Engineering - 67.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 21 2020 Eike Rathke - 67.1-3 +- Replace unversioned %%{__python} macro with %%{__python3} + +* Mon Jul 13 2020 Tom Stellard - 67.1-2 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Fri May 15 2020 Pete Walter - 67.1-1 +- Update to 67.1 + +* Wed Jan 29 2020 Fedora Release Engineering - 65.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Nov 01 2019 Pete Walter - 65.1-1 +- Update to 65.1 +- Add a patch from gentoo to fix the build on s390x +- Drop arm test disabling patches as they are no longer needed + +* Fri Nov 01 2019 Pete Walter - 63.2-4 +- Build with Python 3 + +* Thu Jul 25 2019 Fedora Release Engineering - 63.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Mon May 13 2019 Eike Rathke - 63.2-2 +- Resolves: rhbz#1708935 temporarily roll back to 63.1 + +* Thu May 09 2019 Eike Rathke - 63.2-1 +- Update to 63.2 + +* Fri Feb 01 2019 Fedora Release Engineering - 63.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Jan 23 2019 Pete Walter - 63.1-1 +- Update to 63.1 + +* Tue Nov 06 2018 Eike Rathke - 62.1-3 +- Resolves: rhbz#1646703 CVE-2018-18928 + +* Fri Jul 13 2018 Fedora Release Engineering - 62.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jul 10 2018 Pete Walter - 62.1-1 +- Update to 62.1 + +* Mon May 28 2018 Eike Rathke - 61.1-2 +- Resolves: rhbz#1582611 Add riscv64 to icu-config.sh + +* Tue Apr 24 2018 Eike Rathke - 61.1-1 +- Update to 61.1 + +* Thu Mar 15 2018 Iryna Shcherbina - 60.2-3 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Wed Feb 07 2018 Fedora Release Engineering - 60.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Dec 14 2017 Pete Walter - 60.2-1 +- Update to 60.2 + +* Thu Dec 14 2017 Eike Rathke - 60.1-2 +- Resolves: rhbz#1524820 CVE-2017-17484 + +* Thu Nov 30 2017 Pete Walter - 60.1-1 +- Update to 60.1 + +* Wed Nov 08 2017 Eike Rathke - 57.1-9 +- Resolves: rhbz#1510932 CVE-2017-14952 + +* Wed Aug 02 2017 Fedora Release Engineering - 57.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 57.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Apr 20 2017 Eike Rathke - 57.1-6 +- Resolves: rhbz#1444101 CVE-2017-7867 CVE-2017-7868 + +* Fri Feb 10 2017 Fedora Release Engineering - 57.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Nov 18 2016 Eike Rathke - 57.1-4 +- dist.rpmgrill: "Percent signs in specfile changelog should be escaped" + +* Fri Nov 18 2016 Eike Rathke - 57.1-3 +- Resolves: rhbz#1377362 CVE-2016-7415 + +* Tue Nov 01 2016 Eike Rathke - 57.1-2 +- Resolves: rhbz#1360340 CVE-2016-6293 + +* Fri Apr 15 2016 Eike Rathke - 57.1-1 +- upgrade to upstream ICU 57.1 + +* Tue Apr 05 2016 Eike Rathke - 56.1-7 +- make check failure is fatal again + +* Tue Apr 05 2016 Eike Rathke - 56.1-6 +- remove icu-56.1-codes-cache-extend.patch + +* Sun Feb 28 2016 Raphael Groner - 56.1-5 +- even more verbosity and debug output +- add path to extend ICU's internal cache of codes +- use license macro +- provide samples in devel subpackage +- modernize generally + +* Sat Feb 27 2016 Rex Dieter - 56.1-4 +- %%build: make VERBOSE=1 +- %%check: keep 'make check' non-fatal while investigating rhbz#1307633 + +* Sat Feb 06 2016 Caolán McNamara - 56.1-3 +- Resolves: rhbz#1307633 FTBFS, disable check to get build through for now + +* Thu Feb 04 2016 Fedora Release Engineering - 56.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Oct 27 2015 Eike Rathke - 56.1-1 +- Resolves: rhbz#1271353 upgrade to ICU 56.1 + +* Fri Sep 18 2015 Eike Rathke - 54.1-5 +- Workaround rhbz#1239574 disabling offending tests on armv7hl + +* Wed Jun 17 2015 Fedora Release Engineering - 54.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Apr 10 2015 Eike Rathke - 54.1-3 +- Resolves: rhbz#1190131 CVE-2014-7923 CVE-2014-7926 CVE-2014-9654 +- Resolves: rhbz#1184811 CVE-2014-6585 CVE-2014-6591 + +* Sat Feb 21 2015 Till Maas - 54.1-2 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Mon Jan 26 2015 Eike Rathke - 54.1-1 +- Resolves: rhbz#1185433 upgrade to upstream ICU 54.1 + +* Tue Aug 26 2014 Eike Rathke - 53.1-1 +- Resolves: rhbz#1130771 upgrade to upstream ICU 53.1 + +* Sat Aug 16 2014 Fedora Release Engineering - 52.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Jun 13 2014 Eike Rathke - 52.1-3 +- Resolves: rhbz#1106793 bad 2-digit year test case + +* Sat Jun 07 2014 Fedora Release Engineering - 52.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue Feb 11 2014 Eike Rathke - 52.1-1 +- upgrade to upstream ICU 52.1 +- Resolves: rhbz#1049265 icu-52.1 is available +- Resolves: rhbz#1050063 Trivial change to icu-config to support ppc64le +- drop icu-51-layout-fix-10107.tgz source +- drop integrated icu.10318.CVE-2013-2924_changeset_34076.patch +- drop integrated icu.10143.memory.leak.crash.patch + +* Wed Oct 09 2013 Eike Rathke - 50.1.2-10 +- Resolves: rhbz#1015594 CVE-2013-2924 use-after-free + +* Fri Oct 04 2013 Eike Rathke - 50.1.2-9 +- added %%{?_isa} to Requires for multi-arch systems + +* Sat Aug 03 2013 Fedora Release Engineering - 50.1.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jul 22 2013 Eike Rathke - 50.1.2-7 +- Resolves: rhbz#986814 install icu-config.sh from source2 + +* Wed Jul 17 2013 Eike Rathke - 50.1.2-6 +- Resolves: rhbz#966141 various flaws in Layout Engine font processing +- Resolves: rhbz#966077 aarch64 support for icu-config.sh wrapper + +* Mon Feb 25 2013 Eike Rathke - 50.1.2-5 +- added manpages for gennorm2 and icuinfo, rhbz#884035 related + +* Tue Feb 19 2013 Caolán McNamara - 50.1.2-4 +- Resolves: fdo#52519 crash on typing some Malayalam + +* Tue Jan 29 2013 Eike Rathke - 50.1.2-3 +- Resolves: rhbz#856594 roll back and build without --disable-renaming again + +* Mon Jan 28 2013 Eike Rathke - 50.1.2-2 +- Resolves: rhbz#856594 include content of icu/source/uconfig.h.prepend + +* Fri Jan 25 2013 Eike Rathke - 50.1.2-1 +- Update to 50.1.2 +- Resolves: rhbz#856594 to-do add --disable-renaming on next soname bump +- removed upstream applied icu.9283.regexcmp.crash.patch + +* Wed Sep 12 2012 Caolán McNamara - 49.1.1-7 +- Related: rhbz#856594 reenable icu symbol renaming + +* Wed Sep 12 2012 Caolán McNamara - 49.1.1-6 +- Resolves: rhbz#856594 disable icu symbol renaming + +* Fri Aug 31 2012 Tom Callaway - 49.1.1-5 +- apply upstream fix (bug 9283) for regexcmp crash causing Chromium segfaults + +* Thu Jul 19 2012 Fedora Release Engineering - 49.1.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jun 15 2012 Caolán McNamara - 49.1.1-3 +- probably parallel-build safe by now. Add a check for original breakage + +* Fri Jun 15 2012 Caolán McNamara - 49.1.1-2 +- Resolves: rhbz#804313 multi-lib pain + +* Thu Apr 19 2012 Eike Rathke - 49.1.1-1 +- Update to 49.1.1 + +* Thu Apr 19 2012 Eike Rathke - 4.8.1.1-3 +- Resolves: rhbz#813484 doxygen 1.8.0 does not provide installdox, omit from install + +* Mon Jan 30 2012 Jon Masters - 4.8.1.1-2 +- Correct reference to BZ681941, add temporary fix for ARM FTBFS side effect + +* Fri Jan 20 2012 Peter Robinson -4.8.1.1-1 +- Update to 4.8.1.1 + +* Fri Jan 13 2012 Fedora Release Engineering - 4.8.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 13 2011 Eike Rathke - 4.8.1-3 +- Resolves: rhbz#766542 CVE-2011-4599 Stack-based buffer overflow +- add icu.8984.CVE-2011-4599.patch + +* Mon Oct 24 2011 Caolán McNamara - 4.8.1-2 +- Resolves: rhbz#747193 try and enable ccmp for Indic fonts + +* Wed Sep 07 2011 Caolán McNamara - 4.8.1-1 +- Resolves: rhbz#681941 don't link unneccessary -lm, etc. +- add icu.8800.freeserif.crash.patch + +* Tue Mar 08 2011 Caolán McNamara - 4.6-2 +- Resolves: rhbz#681941 don't link unneccessary -lm, etc. + +* Mon Mar 07 2011 Caolán McNamara - 4.6-1 +- latest version +- upgrade includes a .pc now of its own, drop ours +- drop integrated icu.6995.kannada.patch +- drop integrated icu.7971.buildfix.patch +- drop integrated icu.7972.buildfix.patch +- drop integrated icu.7932.doublecompare.patch +- drop integrated icu.8011.buildfix.patch + +* Fri Feb 11 2011 Caolán McNamara - 4.4.2-8 +- Resolves: rhbz#674328 yet more ways that freeserif crashes libicu + +* Wed Feb 09 2011 Fedora Release Engineering - 4.4.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Feb 03 2011 Caolán McNamara - 4.4.2-6 +- Resolves: rhbz#674328 more ways that freeserif crashes libicu + +* Wed Feb 02 2011 Caolán McNamara - 4.4.2-5 +- Resolves: rhbz#674328 freeserif crashes libicu + +* Thu Jan 13 2011 Caolán McNamara - 4.4.2-4 +- Resolves: rhbz#669237 strip libicudata + +* Mon Nov 29 2010 Caolán McNamara - 4.4.2-3 +- Resolves: rhbz#657964 icu-config bindir returns sbindir + +* Thu Nov 25 2010 Caolán McNamara - 4.4.2-2 +- Resolves: rhbz#654200 revert icu#5431 + +* Mon Oct 04 2010 Caolán McNamara - 4.4.2-1 +- latest version + +* Wed Sep 29 2010 jkeating - 4.4.1-6 +- Rebuilt for gcc bug 634757 + +* Wed Sep 22 2010 Caolán McNamara - 4.4.1-5 +- upstream patches + +* Thu Sep 09 2010 Caolán McNamara - 4.4.1-4 +- Resolves: rhbz#631403 doxygen no longer generates gifs + +* Thu Jul 08 2010 Caolán McNamara - 4.4.1-3 +- move licences into libicu, and add them into the -doc subpackage + as well + +* Wed May 26 2010 Caolán McNamara - 4.4.1-2 +- Resolves: rhbz#596171 drop icu.icu6284.strictalias.patch and use + -fno-strict-aliasig as upstream has added a pile more and doesn't look + interested in proposed patchs + +* Thu Apr 29 2010 Caolán McNamara - 4.4.1-1 +- latest version +- drop integrated icu.icu7567.libctest.patch + +* Fri Apr 02 2010 Caolán McNamara - 4.4-1 +- latest version +- drop integrated icu.6969.pkgdata.patch +- drop integrated icu.icu7039.badextract.patch +- drop integrated icu.XXXX.buildfix.patch + +* Wed Dec 02 2009 Caolán McNamara - 4.2.1-8 +- Resolves: rhbz#543386 update icu-config + +* Thu Nov 19 2009 Caolán McNamara - 4.2.1-7 +- Fix FTBFS with yet another autoconf version that changes + behaviour + +* Mon Aug 31 2009 Caolán McNamara - 4.2.1-6 +- Resolves: rhbz#520468 fix s390x and other secondary archs + +* Tue Jul 28 2009 Caolán McNamara - 4.2.1-5 +- icu#7039 fix broken use of extract to get tests working + +* Fri Jul 24 2009 Fedora Release Engineering - 4.2.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Jul 22 2009 Caolán McNamara - 4.2.1-3 +- make documentation noarch + +* Tue Jul 14 2009 Caolán McNamara - 4.2.1-2 +- rpmlint warnings + +* Fri Jul 03 2009 Caolán McNamara - 4.2.1-1 +- 4.2.1 release + +* Fri Jun 26 2009 Caolán McNamara - 4.2.0.1-3 +- Resolves: rhbz#508288 multilib conflict + +* Thu Jun 11 2009 Caolán McNamara - 4.2.0.1-2 +- Resolves: rhbz#505252 add icu.6995.kannada.patch + +* Mon Jun 08 2009 Caolán McNamara - 4.2.0.1-1 +- 4.2.0.1 release + +* Sat May 09 2009 Caolán McNamara - 4.2-1 +- 4.2 release + +* Sun May 03 2009 Caolán McNamara - 4.2-0.1.d03 +- 4.2 release candidate +- drop resolved icu.icu6008.arm.padding.patch +- drop resolved icu.icu6439.bare.elif.patch + +* Tue Feb 24 2009 Fedora Release Engineering - 4.0.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Tue Feb 03 2009 Caolán McNamara - 4.0.1-2 +- fix bare elif for gcc-4.4 + +* Fri Jan 16 2009 Caolán McNamara - 4.0.1-1 +- 4.0.1 release + +* Mon Dec 29 2008 Caolán McNamara - 4.0-6 +- Resolves rhbz#225896 clean up low hanging rpmlint warnings + +* Tue Dec 16 2008 Caolán McNamara - 4.0-5 +- drop integrated icu.icu5557.safety.patch + +* Thu Nov 20 2008 Caolán McNamara - 4.0-4 +- annoyingly upstream tarball was repacked apparently to remove + some unused/cached dirs + +* Sat Sep 06 2008 Caolán McNamara - 4.0-3 +- Resolves: rhbz#461348 wrong icu-config + +* Tue Aug 26 2008 Caolán McNamara - 4.0-2 +- Resolves: rhbz#459698 drop Malayalam patches. Note test with Rachana/Meera + instead of Lohit Malayalam before filing bugs against icu wrt. + Malayalam rendering + +* Sat Jul 05 2008 Caolán McNamara - 4.0-1 +- final release + +* Mon Jun 30 2008 Caolán McNamara - 4.0-0.3.d03 +- 4.0 release candidate + +* Wed Jun 04 2008 Caolán McNamara - 4.0-0.2.d02 +- drop icu.icu5498.openoffice.org.patch + +* Sat May 31 2008 Caolán McNamara - 4.0-0.1.d02 +- 4.0 release candidate +- drop integrated icu.regexp.patch + +* Mon May 19 2008 Caolán McNamara - 3.8.1-8 +- add icu.icu6284.strictalias.patch and build with + strict-aliasing + +* Tue Mar 18 2008 Caolán McNamara - 3.8.1-7 +- Resolves: rhbz#437761 modify to icu.icu6213.worstcase.patch for + other worst case expansions + +* Mon Mar 17 2008 Caolán McNamara - 3.8.1-6 +- Resolves: rhbz#437761 add icu.icu6213.bengali.worstcase.patch + +* Mon Feb 04 2008 Caolán McNamara - 3.8.1-5 +- Resolves: rhbz#431401 split syllables on 1st 0d4d of a 0d4d + + (>= 0d15 && <= 0d39) + 0d4d + 0d30 sequence + +* Thu Jan 31 2008 Caolán McNamara - 3.8.1-4 +- Resolves: rhbz#431029, rhbz#424661 Remove workaround for 0D31 characters + +* Fri Jan 25 2008 Caolán McNamara - 3.8.1-3 +- CVE-2007-4770 CVE-2007-4771 add icu.regexp.patch +- Resolves: rhbz#423211 fix malalayam stuff in light of syllable + changes + +* Fri Jan 11 2008 Caolán McNamara - 3.8.1-2 +- remove icu.icu5365.dependantvowels.patch and cleanup + icu.icu5506.multiplevowels.patch as they patch and unpatch + eachother (thanks George Rhoten for pointing out that madness) + +* Fri Jan 11 2008 Caolán McNamara - 3.8.1-1 +- latest version +- drop fixed icu.icu6084.zwnj.notdef.patch + +* Thu Dec 13 2007 Caolán McNamara - 3.8-6 +- Resolves: rhbz#423211 experimental hack for 0d15+0d4d+0d30 + +* Tue Dec 11 2007 Caolán McNamara - 3.8-5 +- Resolves: rhbz#415541 icu.icu6084.zwnj.notdef.patch + +* Wed Nov 28 2007 Caolán McNamara - 3.8-4 +- Resolves: ooo#83991 Malayalam "Kartika" font fix + +* Tue Nov 13 2007 Caolán McNamara - 3.8-3 +- add icu.openoffice.org.patch + +* Sat Oct 27 2007 Caolán McNamara - 3.8-2 +- add icu.icu6008.arm.padding.patch to fix an arm problem + +* Tue Oct 02 2007 Caolán McNamara - 3.8-1 +- latest version + +* Mon Sep 03 2007 Caolán McNamara - 3.8-0.2.d02 +- next release candidate + +* Wed Aug 29 2007 Caolán McNamara - 3.8-0.2.d01 +- rebuild + +* Tue Aug 07 2007 Caolán McNamara - 3.8-0.1.d01 +- 3.8 release candidate +- drop integrated icu.icu5433.oriya.patch +- drop integrated icu.icu5488.assamese.patch +- drop integrated icu.icu5500.devicetablecrash.patch +- drop integrated icu.icu5501.sinhala.biggerexpand.patch +- drop integrated icu.icu5594.gujarati.patch +- drop integrated icu.icu5465.telegu.patch + +* Wed Jun 13 2007 Caolán McNamara - 3.6-20 +- Resolves: rhbz#243984 change the icu group as it is libicu + which is "System Environment/Libraries" not icu + +* Mon Apr 30 2007 Caolán McNamara - 3.6-19 +- Resolves: rhbz#220867 Malayalam rendering + +* Tue Feb 13 2007 Caolán McNamara - 3.6-18 +- Resolves: rhbz#228457 icu.icu5594.gujarati.patch + +* Fri Feb 09 2007 Caolán McNamara - 3.6-17 +- spec cleanups + +* Mon Feb 05 2007 Caolán McNamara - 3.6-16 +- Resolves: rhbz#226949 layout telegu like pango + +* Fri Jan 19 2007 Caolán McNamara - 3.6-15 +- Resolves: rhbz#214948 icu.icu5506.multiplevowels.patch + +* Tue Jan 09 2007 Caolán McNamara - 3.6-14 +- Related: rhbz#216089 add icu.icu5557.safety.patch + +* Thu Dec 21 2006 Caolán McNamara - 3.6-13 +- Resolves: rhbz#220433 modify icu.icu5431.malayam.patch + +* Fri Nov 10 2006 Caolán McNamara - 3.6-12 +- Resolves: rhbz#214948 icu.icu5506.multiplevowels.patch + +* Wed Nov 08 2006 Caolán McNamara - 3.6-11 +- Resolves: rhbz#214555 icu.icu5501.sinhala.biggerexpand.patch + +* Wed Nov 08 2006 Caolán McNamara - 3.6-10 +- Resolves: rhbz#214555 icu.icu5500.devicetablecrash.patch + +* Wed Oct 18 2006 Caolán McNamara - 3.6-9 +- Resolves: rhbz#213648 extend prev/next to handle ZWJ + +* Wed Oct 18 2006 Caolán McNamara - 3.6-8 +- Resolves: rhbz213375 (icu.icu5488.assamese.patch) + +* Wed Oct 18 2006 Caolán McNamara - 3.6-7 +- Resolves: rhbz#211258 (icu.icu5465.telegu.patch) + +* Thu Oct 05 2006 Caolán McNamara - 3.6-6 +- rh#209391# add icu.icuXXXX.virama.prevnext.patch + +* Mon Oct 02 2006 Caolán McNamara - 3.6-5 +- rh#208705# add pkg-config Require for -devel package +- add icu.icu5431.malayam.patch for rh#208551#/rh#209084# +- add icu.icu5433.oriya.patch for rh#208559#/rh#209083# + +* Sun Oct 01 2006 Jesse Keating - 3.6-4 +- rebuilt for unwind info generation, broken in gcc-4.1.1-21 + +* Mon Sep 25 2006 Caolán McNamara - 3.6-3 +- rh#206615# render malayam like pango + +* Wed Sep 06 2006 Caolán McNamara - 3.6-2 +- fix rh#205252#/icu#5365 (gnome#121882#/#icu#4026#) to make icu + like pango for multiple dependant vowels + +* Sun Sep 03 2006 Caolán McNamara - 3.6-1 +- final release + +* Mon Aug 14 2006 Caolán McNamara - 3.6-0.1.d02 +- bump + +* Tue Aug 08 2006 Caolán McNamara - 3.6-0.2.d01 +- c++ code not alias correct + +* Mon Jul 31 2006 Caolán McNamara - 3.6-0.1.d01 +- rh#200728# update to prelease 3.6d01 to pick up on sinhala fixes +- drop integrated rh190879.patch +- drop integrated icu-3.4-sinhala1.patch + +* Wed Jul 12 2006 Jesse Keating - 3.4-10.1.1 +- rebuild + +* Wed Jul 12 2006 Jesse Keating - 3.4-10.1 +- rebuild + +* Sat Jun 10 2006 Caolán McNamara - 3.4-10 +- rh#194686# BuildRequires + +* Tue May 09 2006 Caolán McNamara - 3.4-9 +- rh#190879# backport fix + +* Wed May 03 2006 Caolán McNamara - 3.4-8 +- add Harshula's icu-3.4-sinhala1.patch for some Sinhala support + +* Tue May 02 2006 Caolán McNamara - 3.4-7 +- add a pkgconfig.pc, make icu-config use it + +* Fri Feb 10 2006 Jesse Keating - 3.4-6.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 3.4-6.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Tue Jan 03 2006 Caolán McNamara - 3.4-6 +- add icu-gcc41.patch + +* Tue Oct 11 2005 Caolán McNamara - 3.4-5 +- clear execstack requirement for libicudata + +* Mon Sep 12 2005 Caolán McNamara - 3.4-4 +- import extra icu.spec into fedora core for openoffice.org +- build with gcc 4 + +* Wed Aug 31 2005 Thorsten Leemhuis - 3.4-3 +- Use dist +- gcc32 does not understand -fstack-protector and + --param=ssp-buffer-size=4 + +* Tue Aug 2 2005 Ville Skyttä - 3.4-2 +- 3.4. + +* Sun Jul 31 2005 Ville Skyttä - 3.4-0.2.d02 +- 3.4-d02. +- Don't ship static libraries. + +* Wed Apr 27 2005 Ville Skyttä - 3.2-3 +- Apply upstream case mapping mutex lock removal patch. +- Build with gcc 3.2 as a temporary workaround for #152495. + +* Thu Apr 7 2005 Michael Schwendt - 3.2-2 +- rebuilt + +* Sat Jan 1 2005 Ville Skyttä - 3.2-1 +- Don't use %%{_smp_mflags} (b.f.u #2357). +- Remove unnecessary Epochs. + +* Sat Dec 4 2004 Ville Skyttä - 0:3.2-0.fdr.1 +- Update to 3.2. + +* Sun Jul 18 2004 Ville Skyttä - 0:3.0-0.fdr.1 +- Update to 3.0, datadirs patch no longer needed. +- Package data in shared libs, drop -locales subpackage. +- Rename -docs subpackage to libicu-doc, and generate graphs with graphviz. + +* Sat Dec 13 2003 Ville Skyttä - 0:2.6.1-0.fdr.3 +- Partial fix for bad datadirs returned by icu-config (works as long as + data packaging mode is not "common" or "dll"). + +* Sun Nov 23 2003 Ville Skyttä - 0:2.6.1-0.fdr.2 +- First complete version. + +* Sun Sep 28 2003 Ville Skyttä - 0:2.6.1-0.fdr.1 +- Update to 2.6.1. + +* Wed Aug 27 2003 Ville Skyttä - 0:2.6-0.fdr.1 +- First build, based on upstream and SuSE 8.2 packages.