Compare commits

...

No commits in common. 'c9' and 'i10cs' have entirely different histories.
c9 ... i10cs

2
.gitignore vendored

@ -1 +1 @@
SOURCES/icu4c-67_1-src.tgz SOURCES/icu4c-74_2-src-FIXED.tgz

@ -1 +1 @@
6822a4a94324d1ba591b3e8ef084e4491af253c1 SOURCES/icu4c-67_1-src.tgz 43a8d688a3a6bc8f0f8c5e699d0ef7a905d24314 SOURCES/icu4c-74_2-src-FIXED.tgz

@ -0,0 +1,390 @@
From af6fbac0bdba3080a8bcb5d12764d1fece2e9c1d Mon Sep 17 00:00:00 2001
From: Mike FABIAN <mfabian@redhat.com>
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<ICUService *>(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<const UnicodeString*>(entry->key.pointer);
+ ICUServiceFactory* f = static_cast<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;
}
- 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);
+
/**
* <p>A convenience override of registerInstance(UObject*, const UnicodeString&, UBool)
* that defaults visible to true.</p>
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<TransliteratorIDParser::SingleID> 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

@ -0,0 +1,487 @@
From ac0192d1de167e11f2d8a28e2781941be4f60877 Mon Sep 17 00:00:00 2001
From: Mike FABIAN <mfabian@redhat.com>
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(cs0<UCNV_2022_MAX_CONVERTERS);
+ /* coverity[overrun-local] */
len2 = MBCS_FROM_UCHAR32_ISO2022(
converterData->myConverterArray[cs0],
sourceChar,
@@ -3392,6 +3393,7 @@ UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
}else{
U_ASSERT(tempState<UCNV_2022_MAX_CONVERTERS);
+ /* coverity[overrun-local] */
cnv = myData->myConverterArray[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<targetLimit) {
*target++=toBase64[(c>>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 "<category-HHHH>" 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<DoubleChunk>(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<LNF>&& src) noexcept
: NFS<LNF>(std::move(src)) {
+ // coverity[use_after_move]
lnfMoveHelper(std::move(static_cast<LNF&&>(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<digits_t>(minSig);
settings.fMaxSig = static_cast<digits_t>(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<LNF>&& src) noexcept
: NFS<LNF>(std::move(src)) {
// Steal the compiled formatter
+ // coverity[use_after_move]
LNF&& _src = static_cast<LNF&&>(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; i<itemCount; ++pItem, ++i) {
int32_t type=makeTypeEnum(pItem->type);
+ /* 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

@ -1,453 +0,0 @@
diff -ru icu.orig/source/common/serv.cpp icu/source/common/serv.cpp
--- icu.orig/source/common/serv.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/serv.cpp 2021-08-18 13:04:50.838841089 +0200
@@ -532,12 +532,14 @@
}
UnicodeString* idToCache = new UnicodeString(currentDescriptor);
if (idToCache == NULL || idToCache->isBogus()) {
+ delete idToCache;
status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
cacheDescriptorList._obj->addElement(idToCache, status);
if (U_FAILURE(status)) {
+ // delete idToCache;
return NULL;
}
} while (key.fallback());
diff -ru icu.orig/source/common/uloc_keytype.cpp icu/source/common/uloc_keytype.cpp
--- icu.orig/source/common/uloc_keytype.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/uloc_keytype.cpp 2021-08-18 14:03:41.707324553 +0200
@@ -331,6 +331,10 @@
LocExtKeyData* keyData = gLocExtKeyDataEntries->create();
if (keyData == NULL) {
sts = U_MEMORY_ALLOCATION_ERROR;
+ if (typeDataMap != NULL) {
+ uhash_close(typeDataMap);
+ typeDataMap = NULL;
+ }
break;
}
keyData->bcpId = bcpKeyId;
diff -ru icu.orig/source/common/umutablecptrie.cpp icu/source/common/umutablecptrie.cpp
--- icu.orig/source/common/umutablecptrie.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/umutablecptrie.cpp 2021-08-18 13:59:02.507170287 +0200
@@ -1543,7 +1543,7 @@
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 -ru icu.orig/source/i18n/rbt_pars.cpp icu/source/i18n/rbt_pars.cpp
--- icu.orig/source/i18n/rbt_pars.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/i18n/rbt_pars.cpp 2021-08-18 16:03:45.537119292 +0200
@@ -557,6 +557,7 @@
// The next character MUST be a segment open
if (single == NULL ||
!ICU_Utility::parseChar(rule, iref, SEGMENT_OPEN)) {
+ delete single;
return syntaxError(U_INVALID_FUNCTION, rule, start, status);
}
diff -ru icu.orig/source/i18n/tridpars.cpp icu/source/i18n/tridpars.cpp
--- icu.orig/source/i18n/tridpars.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/i18n/tridpars.cpp 2021-08-18 16:08:57.727071891 +0200
@@ -136,6 +136,9 @@
specsB = parseFilterID(id, pos, TRUE);
// Must close with a ')'
if (specsB == NULL || !ICU_Utility::parseChar(id, pos, CLOSE_REV)) {
+ if (specsB != NULL) {
+ delete specsB;
+ }
delete specsA;
pos = start;
return NULL;
diff -ru icu.orig/source/i18n/usearch.cpp icu/source/i18n/usearch.cpp
--- icu.orig/source/i18n/usearch.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/i18n/usearch.cpp 2021-08-18 16:19:31.533900708 +0200
@@ -222,6 +222,9 @@
int32_t *temp = (int32_t *)allocateMemory(
sizeof(int32_t) * newlength, status);
if (U_FAILURE(*status)) {
+ if (temp != NULL) {
+ uprv_free(temp);
+ }
return NULL;
}
uprv_memcpy(temp, destination, sizeof(int32_t) * (size_t)offset);
diff -ru icu.orig/source/i18n/usearch.cpp icu/source/i18n/usearch.cpp
--- icu.orig/source/i18n/usearch.cpp 2021-08-18 16:23:27.961337248 +0200
+++ icu/source/i18n/usearch.cpp 2021-08-18 16:27:47.140623351 +0200
@@ -266,6 +266,9 @@
sizeof(int64_t) * newlength, status);
if (U_FAILURE(*status)) {
+ if (temp != NULL) {
+ uprv_free(temp);
+ }
return NULL;
}
diff -ru icu.orig/source/i18n/uspoof_impl.cpp icu/source/i18n/uspoof_impl.cpp
--- icu.orig/source/i18n/uspoof_impl.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/i18n/uspoof_impl.cpp 2021-08-18 16:30:43.061460025 +0200
@@ -196,6 +196,9 @@
tmpSet = allowedChars.clone();
const char *tmpLocalesList = uprv_strdup(localesList);
if (tmpSet == NULL || tmpLocalesList == NULL) {
+ if (tmpLocalesList != NULL) {
+ uprv_free((void *)tmpLocalesList);
+ }
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
diff -ru icu.orig/source/common/loclikely.cpp icu/source/common/loclikely.cpp
--- icu.orig/source/common/loclikely.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/loclikely.cpp 2021-08-18 16:59:05.786257032 +0200
@@ -1351,7 +1351,9 @@
}
}
- rgBuf[rgLen] = 0;
+ if (rgLen >= 0) {
+ rgBuf[rgLen] = 0;
+ }
uprv_strncpy(region, rgBuf, regionCapacity);
return u_terminateChars(region, regionCapacity, rgLen, status);
}
diff -ru icu.orig/source/common/lsr.cpp icu/source/common/lsr.cpp
--- icu.orig/source/common/lsr.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/lsr.cpp 2021-08-18 17:39:36.706794880 +0200
@@ -89,13 +89,15 @@
int32_t b = region[1] - '0';
if (b < 0 || 9 < b) { return 0; }
c = region[2] - '0';
- if (c < 0 || 9 < c || region[3] != 0) { return 0; }
+ if (uprv_strlen(region) > 3) { return 0; }
+ if (c < 0 || 9 < c) { return 0; }
return (10 * a + b) * 10 + c + 1;
} else { // letters: "DE"
a = uprv_upperOrdinal(c);
if (a < 0 || 25 < a) { return 0; }
int32_t b = uprv_upperOrdinal(region[1]);
- if (b < 0 || 25 < b || region[2] != 0) { return 0; }
+ if (uprv_strlen(region) > 2) { return 0; }
+ if (b < 0 || 25 < b) { return 0; }
return 26 * a + b + 1001;
}
return 0;
diff -ru icu.orig/source/tools/toolutil/filetools.cpp icu/source/tools/toolutil/filetools.cpp
--- icu.orig/source/tools/toolutil/filetools.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/tools/toolutil/filetools.cpp 2021-08-19 09:56:56.393333089 +0200
@@ -64,6 +64,7 @@
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;
}
diff -ru icu.orig/source/tools/pkgdata/pkgtypes.c icu/source/tools/pkgdata/pkgtypes.c
--- icu.orig/source/tools/pkgdata/pkgtypes.c 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/tools/pkgdata/pkgtypes.c 2021-08-19 10:37:07.400622046 +0200
@@ -30,6 +30,7 @@
{
int32_t ln = 0;
char buffer[1024];
+ char *bufferp = buffer;
while(l != NULL)
{
if(l->str)
@@ -42,7 +43,7 @@
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] != '"') {
@@ -53,7 +54,7 @@
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);
}
@@ -74,7 +75,8 @@
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)
@@ -92,7 +94,7 @@
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] != '"') {
@@ -103,7 +105,7 @@
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 -ru icu.orig/source/tools/pkgdata/pkgdata.cpp icu/source/tools/pkgdata/pkgdata.cpp
--- icu.orig/source/tools/pkgdata/pkgdata.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/tools/pkgdata/pkgdata.cpp 2021-08-19 11:11:35.563339463 +0200
@@ -980,12 +980,12 @@
version_major);
#else
if (noVersion && !reverseExt) {
- sprintf(libFileNames[LIB_FILE_VERSION_TMP], "%s%s%s",
+ snprintf(libFileNames[LIB_FILE_VERSION_TMP], sizeof(libFileNames[LIB_FILE_VERSION_TMP]), "%s%s%s",
libFileNames[LIB_FILE],
FILE_SUFFIX,
pkgDataFlags[SOBJ_EXT]);
} else {
- sprintf(libFileNames[LIB_FILE_VERSION_TMP], "%s%s%s%s%s",
+ snprintf(libFileNames[LIB_FILE_VERSION_TMP], sizeof(libFileNames[LIB_FILE_VERSION_TMP]), "%s%s%s%s%s",
libFileNames[LIB_FILE],
FILE_SUFFIX,
reverseExt ? version : pkgDataFlags[SOBJ_EXT],
@@ -994,24 +994,24 @@
}
#endif
if (noVersion && !reverseExt) {
- sprintf(libFileNames[LIB_FILE_VERSION_MAJOR], "%s%s%s",
+ snprintf(libFileNames[LIB_FILE_VERSION_MAJOR], sizeof(libFileNames[LIB_FILE_VERSION_MAJOR]), "%s%s%s",
libFileNames[LIB_FILE],
FILE_SUFFIX,
pkgDataFlags[SO_EXT]);
- sprintf(libFileNames[LIB_FILE_VERSION], "%s%s%s",
+ snprintf(libFileNames[LIB_FILE_VERSION], sizeof(libFileNames[LIB_FILE_VERSION]), "%s%s%s",
libFileNames[LIB_FILE],
FILE_SUFFIX,
pkgDataFlags[SO_EXT]);
} else {
- sprintf(libFileNames[LIB_FILE_VERSION_MAJOR], "%s%s%s%s%s",
+ snprintf(libFileNames[LIB_FILE_VERSION_MAJOR], sizeof(libFileNames[LIB_FILE_VERSION_MAJOR]), "%s%s%s%s%s",
libFileNames[LIB_FILE],
FILE_SUFFIX,
reverseExt ? version_major : pkgDataFlags[SO_EXT],
FILE_EXTENSION_SEP,
reverseExt ? pkgDataFlags[SO_EXT] : version_major);
- sprintf(libFileNames[LIB_FILE_VERSION], "%s%s%s%s%s",
+ snprintf(libFileNames[LIB_FILE_VERSION], sizeof(libFileNames[LIB_FILE_VERSION]), "%s%s%s%s%s",
libFileNames[LIB_FILE],
FILE_SUFFIX,
reverseExt ? version : pkgDataFlags[SO_EXT],
@@ -1029,7 +1029,7 @@
#endif
if(IN_STATIC_MODE(mode)) {
- sprintf(libFileNames[LIB_FILE_VERSION], "%s.%s", libFileNames[LIB_FILE], pkgDataFlags[A_EXT]);
+ snprintf(libFileNames[LIB_FILE_VERSION], sizeof(libFileNames[LIB_FILE_VERSION]), "%s.%s", libFileNames[LIB_FILE], pkgDataFlags[A_EXT]);
libFileNames[LIB_FILE_VERSION_MAJOR][0]=0;
if(o->verbose) {
fprintf(stdout, "# libFileName[LIB_FILE_VERSION] = %s (static)\n", libFileNames[LIB_FILE_VERSION]);
@@ -1308,7 +1308,7 @@
* archive file suffix is the same, then the final library needs to be archived.
*/
if (uprv_strcmp(pkgDataFlags[SOBJ_EXT], pkgDataFlags[SO_EXT]) != 0 && uprv_strcmp(pkgDataFlags[A_EXT], pkgDataFlags[SO_EXT]) == 0) {
- sprintf(libFileNames[LIB_FILE_VERSION], "%s%s%s.%s",
+ snprintf(libFileNames[LIB_FILE_VERSION], sizeof(libFileNames[LIB_FILE_VERSION]), "%s%s%s.%s",
libFileNames[LIB_FILE],
pkgDataFlags[LIB_EXT_ORDER][0] == '.' ? "." : "",
reverseExt ? version : pkgDataFlags[SO_EXT],
diff -ru icu.orig/source/tools/ctestfw/ctest.c icu/source/tools/ctestfw/ctest.c
--- icu.orig/source/tools/ctestfw/ctest.c 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/tools/ctestfw/ctest.c 2021-08-19 13:19:21.016799737 +0200
@@ -686,7 +686,6 @@
}
vfprintf(stdout, pattern, ap);
fflush(stdout);
- va_end(ap);
if((*pattern==0) || (pattern[strlen(pattern)-1]!='\n')) {
HANGING_OUTPUT=1;
} else {
@@ -728,7 +727,6 @@
}
vfprintf(stdout, pattern, ap);
fflush(stdout);
- va_end(ap);
if((*pattern==0) || (pattern[strlen(pattern)-1]!='\n')) {
HANGING_OUTPUT=1;
} else {
@@ -777,7 +775,6 @@
}
vfprintf(stdout, pattern, ap);
fflush(stdout);
- va_end(ap);
GLOBAL_PRINT_COUNT++;
if((*pattern==0) || (pattern[strlen(pattern)-1]!='\n')) {
HANGING_OUTPUT=1;
@@ -803,6 +800,7 @@
}
va_start(ap, pattern);
vlog_err(NULL, pattern, ap);
+ va_end(ap);
}
UBool T_CTEST_EXPORT2
@@ -806,8 +806,11 @@
UBool T_CTEST_EXPORT2
log_knownIssue(const char *ticket, const char *pattern, ...) {
va_list ap;
+ UBool result;
va_start(ap, pattern);
- return vlog_knownIssue(ticket, pattern, ap);
+ result = vlog_knownIssue(ticket, pattern, ap);
+ va_end(ap);
+ return result;
}
void T_CTEST_EXPORT2
@@ -843,6 +842,7 @@
}
vlog_err(NULL, pattern, ap); /* no need for prefix in default case */
}
+ va_end(ap);
}
void T_CTEST_EXPORT2
@@ -852,6 +852,7 @@
va_start(ap, pattern);
vlog_info(NULL, pattern, ap);
+ va_end(ap);
}
void T_CTEST_EXPORT2
@@ -861,6 +862,7 @@
va_start(ap, pattern);
vlog_verbose(NULL, pattern, ap);
+ va_end(ap);
}
@@ -882,6 +884,7 @@
} else {
vlog_info("[DATA] ", pattern, ap);
}
+ va_end(ap);
}
diff -ru icu/source/tools/gensprep/store.c icu.new/source/tools/gensprep/store.c
--- icu/source/tools/gensprep/store.c 2020-04-22 22:04:20.000000000 +0200
+++ icu.new/source/tools/gensprep/store.c 2021-08-19 16:16:17.213687755 +0200
@@ -636,7 +636,6 @@
cleanUpData(void) {
uprv_free(mappingData);
utrie_close(sprepTrie);
- uprv_free(sprepTrie);
}
#endif /* #if !UCONFIG_NO_IDNA */
diff -ru icu.orig/source/common/uloc_tag.cpp icu/source/common/uloc_tag.cpp
--- icu.orig/source/common/uloc_tag.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/uloc_tag.cpp 2021-08-19 16:32:26.948185554 +0200
@@ -2254,6 +2254,7 @@
var = (VariantListEntry*)uprv_malloc(sizeof(VariantListEntry));
if (var == NULL) {
*status = U_MEMORY_ALLOCATION_ERROR;
+ uprv_free(pExtension);
return NULL;
}
*pSep = 0;
diff -ru icu.orig/source/common/uloc_keytype.cpp icu/source/common/uloc_keytype.cpp
--- icu.orig/source/common/uloc_keytype.cpp 2021-08-19 16:34:07.037514442 +0200
+++ icu/source/common/uloc_keytype.cpp 2021-08-19 16:37:38.276098078 +0200
@@ -325,6 +325,10 @@
}
}
if (U_FAILURE(sts)) {
+ if (typeDataMap != NULL) {
+ uhash_close(typeDataMap);
+ typeDataMap = NULL;
+ }
break;
}
diff -ru icu.orig/source/common/serv.cpp icu/source/common/serv.cpp
--- icu.orig/source/common/serv.cpp 2021-08-19 20:45:49.923742619 +0200
+++ icu/source/common/serv.cpp 2021-08-20 13:16:04.401298668 +0200
@@ -793,6 +793,7 @@
*/
int32_t pos = UHASH_FIRST;
const UHashElement *entry = NULL;
+ /* coverity[deref_after_free] */
while ((entry = dnCache->cache.nextElement(pos)) != NULL) {
const UnicodeString* id = (const UnicodeString*)entry->value.pointer;
if (matchKey != NULL && !matchKey->isFallbackOf(*id)) {
diff -ru icu.orig/source/i18n/decNumber.h icu/source/i18n/decNumber.h
--- icu.orig/source/i18n/decNumber.h 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/i18n/decNumber.h 2021-08-20 13:17:27.208783404 +0200
@@ -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 -ru icu.orig/source/tools/makeconv/genmbcs.cpp icu/source/tools/makeconv/genmbcs.cpp
--- icu.orig/source/tools/makeconv/genmbcs.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/tools/makeconv/genmbcs.cpp 2021-08-23 08:07:02.972087418 +0200
@@ -172,7 +172,7 @@
}
MBCSInit(mbcsData, ucm);
- return &mbcsData->newConverter;
+ return (NewConverter *)mbcsData;
}
static void
diff -ru icu.orig/source/common/brkiter.cpp icu/source/common/brkiter.cpp
--- icu.orig/source/common/brkiter.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/brkiter.cpp 2021-08-23 13:56:11.644603960 +0200
@@ -105,7 +105,9 @@
}
}
+ /* coverity[incorrect_free] */
ures_close(brkRules);
+ /* coverity[incorrect_free] */
ures_close(brkName);
UDataMemory* file = udata_open(U_ICUDATA_BRKITR, ext, fnbuff, &status);
diff -ru icu.orig/source/common/uresbund.cpp icu/source/common/uresbund.cpp
--- icu.orig/source/common/uresbund.cpp 2020-04-22 22:04:20.000000000 +0200
+++ icu/source/common/uresbund.cpp 2021-08-23 13:56:53.329339657 +0200
@@ -2493,7 +2493,9 @@
static void U_CALLCONV
ures_loc_closeLocales(UEnumeration *enumerator) {
ULocalesContext *ctx = (ULocalesContext *)enumerator->context;
+ /* coverity[address_free] */
ures_close(&ctx->curr);
+ /* coverity[address_free] */
ures_close(&ctx->installed);
uprv_free(ctx);
uprv_free(enumerator);

@ -1,14 +1,28 @@
#%%global debugtrace 1 #%%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 Name: icu
Version: 67.1 Version: 74.2
Release: 9%{?dist} Release: 4%{?dist}
Summary: International Components for Unicode Summary: International Components for Unicode
License: MIT and UCD and Public Domain License: Unicode-DFS-2016 AND BSD-2-Clause AND BSD-3-Clause AND LicenseRef-Fedora-Public-Domain
URL: http://site.icu-project.org/ URL: http://site.icu-project.org/
Source0: https://github.com/unicode-org/icu/releases/download/release-67-1/icu4c-67_1-src.tgz Source0: https://github.com/unicode-org/icu/releases/download/release-%{version_dash}/icu4c-%{version_underscore}-src-FIXED.tgz
Source1: icu-config.sh %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
BuildRequires: gcc-c++ BuildRequires: gcc-c++
@ -18,7 +32,9 @@ Requires: lib%{name}%{?_isa} = %{version}-%{release}
Patch4: gennorm2-man.patch Patch4: gennorm2-man.patch
Patch5: icuinfo-man.patch Patch5: icuinfo-man.patch
Patch6: coverity.patch
Patch10: 0001-ICU-21667-Fix-coverity-warnings.patch
Patch11: 0002-Fix-coverity-warnings-icu-74.2.patch
%description %description
Tools and utilities for developing with icu. Tools and utilities for developing with icu.
@ -59,7 +75,13 @@ BuildArch: noarch
%prep %prep
%autosetup -p1 -n %{name} %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 %build
pushd source pushd source
@ -105,7 +127,7 @@ chmod +x $RPM_BUILD_ROOT%{_libdir}/*.so.*
cd $RPM_BUILD_ROOT%{_bindir} cd $RPM_BUILD_ROOT%{_bindir}
mv icu-config icu-config-%{__isa_bits} mv icu-config icu-config-%{__isa_bits}
) )
install -p -m755 -D %{SOURCE1} $RPM_BUILD_ROOT%{_bindir}/icu-config install -p -m755 -D %{SOURCE10} $RPM_BUILD_ROOT%{_bindir}/icu-config
%check %check
@ -113,21 +135,13 @@ install -p -m755 -D %{SOURCE1} $RPM_BUILD_ROOT%{_bindir}/icu-config
if grep -q @VERSION@ source/tools/*/*.8 source/tools/*/*.1 source/config/*.1; then if grep -q @VERSION@ source/tools/*/*.8 source/tools/*/*.1 source/config/*.1; then
exit 1 exit 1
fi fi
%ifarch i686
# F26 since the mass rebuild in 2017-Feb fails a check, ignore error. TODO: find cause / disable only one.
%make_build -C source check ||:
%else
%make_build -C source check %make_build -C source check
%endif
# log available codes # log available codes
pushd source pushd source
LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
%ldconfig_scriptlets -n lib%{name}
%files %files
%license license.html %license license.html
%exclude %{_datadir}/%{name}/*/LICENSE %exclude %{_datadir}/%{name}/*/LICENSE
@ -137,16 +151,18 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
%{_bindir}/gencnval %{_bindir}/gencnval
%{_bindir}/gendict %{_bindir}/gendict
%{_bindir}/genrb %{_bindir}/genrb
%{_bindir}/icuexportdata
%{_bindir}/makeconv %{_bindir}/makeconv
%{_bindir}/pkgdata %{_bindir}/pkgdata
%{_bindir}/uconv %{_bindir}/uconv
%{_sbindir}/* %{_sbindir}/*
%{_mandir}/man1/derb.1* %{_mandir}/man1/derb.1*
%{_mandir}/man1/genbrk.1*
%{_mandir}/man1/gencfu.1* %{_mandir}/man1/gencfu.1*
%{_mandir}/man1/gencnval.1* %{_mandir}/man1/gencnval.1*
%{_mandir}/man1/gendict.1* %{_mandir}/man1/gendict.1*
%{_mandir}/man1/genrb.1* %{_mandir}/man1/genrb.1*
%{_mandir}/man1/genbrk.1* %{_mandir}/man1/icuexportdata.1*
%{_mandir}/man1/makeconv.1* %{_mandir}/man1/makeconv.1*
%{_mandir}/man1/pkgdata.1* %{_mandir}/man1/pkgdata.1*
%{_mandir}/man1/uconv.1* %{_mandir}/man1/uconv.1*
@ -181,15 +197,75 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
%changelog %changelog
* Wed Aug 18 2021 Mike FABIAN <mfabian@redhat.com> - 67.1-9 * Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 74.2-4
- Resolves: rhbz#1938741 Fix coverity scan problems - Bump release for October 2024 mass rebuild:
Resolves: RHEL-64018
* Fri Oct 25 2024 MSVSphere Packaging Team <packager@msvsphere-os.ru> - 74.2-3
- Rebuilt for MSVSphere 10
* Fri Sep 20 2024 Mike FABIAN <mfabian@redhat.com> - 74.2-3
- Resolves: RHEL-59365 Fix coverity warnings
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 74.2-2
- Bump release for June 2024 mass rebuild
* Wed Jan 31 2024 Pete Walter <pwalter@fedoraproject.org> - 74.2-1
- Update to 74.2
* Mon Jan 29 2024 Pete Walter <pwalter@fedoraproject.org> - 74.1-1
- Update to 74.1
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 73.2-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jan 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 73.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Dec 13 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 73.2-3
- Fix broken TestHebrewCalendarInTemporalLeapYear
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 73.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Jul 06 2023 Frantisek Zatloukal <fzatlouk@redhat.com> - 73.2-1
- Update to 73.2
* Fri Jan 20 2023 Eike Rathke <erack@redhat.com> - 72.1-3
- migrated to SPDX license IDs
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 72.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Dec 28 2022 Pete Walter <pwalter@fedoraproject.org> - 72.1-1
- Update to 72.1
* Fri Sep 23 2022 Mike FABIAN <mfabian@redhat.com> - 71.1-2
- Update timezone data to 2022b
* Wed Jul 27 2022 Frantisek Zatloukal <fzatlouk@redhat.com> - 71.1-1
- Update to 71.1
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 69.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu May 05 2022 Mike FABIAN <mfabian@redhat.com> - 69.1-6
- Update timezone data to 2022a
* Wed Feb 02 2022 Eike Rathke <erack@redhat.com> - 69.1-5
- Introduce use_tzdata_update flag
* Tue Feb 01 2022 Mike FABIAN <mfabian@redhat.com> - 69.1-4
- Update timezone data to 2021a4
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 69.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 67.1-8 * Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 69.1-2
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Related: rhbz#1991688
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 67.1-7 * Wed May 19 2021 Pete Walter <pwalter@fedoraproject.org> - 69.1-1
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - Update to 69.1
* Tue Mar 30 2021 Jonathan Wakely <jwakely@redhat.com> - 67.1-6 * Tue Mar 30 2021 Jonathan Wakely <jwakely@redhat.com> - 67.1-6
- Rebuilt for removed libstdc++ symbol (#1937698) - Rebuilt for removed libstdc++ symbol (#1937698)
@ -556,7 +632,7 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
- drop integrated icu.icu5557.safety.patch - drop integrated icu.icu5557.safety.patch
* Thu Nov 20 2008 Caolán McNamara <caolanm@redhat.com> - 4.0-4 * Thu Nov 20 2008 Caolán McNamara <caolanm@redhat.com> - 4.0-4
- annoyingly upstream tarball was repacked apparently to remove - annoyingly upstream tarball was repacked apparently to remove
some unused/cached dirs some unused/cached dirs
* Sat Sep 06 2008 Caolán McNamara <caolanm@redhat.com> - 4.0-3 * Sat Sep 06 2008 Caolán McNamara <caolanm@redhat.com> - 4.0-3
@ -581,7 +657,7 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
- drop integrated icu.regexp.patch - drop integrated icu.regexp.patch
* Mon May 19 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-8 * Mon May 19 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-8
- add icu.icu6284.strictalias.patch and build with - add icu.icu6284.strictalias.patch and build with
strict-aliasing strict-aliasing
* Tue Mar 18 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-7 * Tue Mar 18 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-7
@ -592,7 +668,7 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
- Resolves: rhbz#437761 add icu.icu6213.bengali.worstcase.patch - Resolves: rhbz#437761 add icu.icu6213.bengali.worstcase.patch
* Mon Feb 04 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-5 * Mon Feb 04 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-5
- Resolves: rhbz#431401 split syllables on 1st 0d4d of a 0d4d + - Resolves: rhbz#431401 split syllables on 1st 0d4d of a 0d4d +
(>= 0d15 && <= 0d39) + 0d4d + 0d30 sequence (>= 0d15 && <= 0d39) + 0d4d + 0d30 sequence
* Thu Jan 31 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-4 * Thu Jan 31 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-4
@ -605,7 +681,7 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
* Fri Jan 11 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-2 * Fri Jan 11 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-2
- remove icu.icu5365.dependantvowels.patch and cleanup - remove icu.icu5365.dependantvowels.patch and cleanup
icu.icu5506.multiplevowels.patch as they patch and unpatch icu.icu5506.multiplevowels.patch as they patch and unpatch
eachother (thanks George Rhoten for pointing out that madness) eachother (thanks George Rhoten for pointing out that madness)
* Fri Jan 11 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-1 * Fri Jan 11 2008 Caolán McNamara <caolanm@redhat.com> - 3.8.1-1
@ -646,7 +722,7 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
- drop integrated icu.icu5465.telegu.patch - drop integrated icu.icu5465.telegu.patch
* Wed Jun 13 2007 Caolán McNamara <caolanm@redhat.com> - 3.6-20 * Wed Jun 13 2007 Caolán McNamara <caolanm@redhat.com> - 3.6-20
- Resolves: rhbz#243984 change the icu group as it is libicu - Resolves: rhbz#243984 change the icu group as it is libicu
which is "System Environment/Libraries" not icu which is "System Environment/Libraries" not icu
* Mon Apr 30 2007 Caolán McNamara <caolanm@redhat.com> - 3.6-19 * Mon Apr 30 2007 Caolán McNamara <caolanm@redhat.com> - 3.6-19
@ -703,7 +779,7 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
- rh#206615# render malayam like pango - rh#206615# render malayam like pango
* Wed Sep 06 2006 Caolán McNamara <caolanm@redhat.com> - 3.6-2 * Wed Sep 06 2006 Caolán McNamara <caolanm@redhat.com> - 3.6-2
- fix rh#205252#/icu#5365 (gnome#121882#/#icu#4026#) to make icu - fix rh#205252#/icu#5365 (gnome#121882#/#icu#4026#) to make icu
like pango for multiple dependant vowels like pango for multiple dependant vowels
* Sun Sep 03 2006 Caolán McNamara <caolanm@redhat.com> - 3.6-1 * Sun Sep 03 2006 Caolán McNamara <caolanm@redhat.com> - 3.6-1
@ -756,7 +832,7 @@ LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:$LD_LIBRARY_PATH bin/uconv -l
* Wed Aug 31 2005 Thorsten Leemhuis <fedora at leemhuis.info> - 3.4-3 * Wed Aug 31 2005 Thorsten Leemhuis <fedora at leemhuis.info> - 3.4-3
- Use dist - Use dist
- gcc32 does not understand -fstack-protector and - gcc32 does not understand -fstack-protector and
--param=ssp-buffer-size=4 --param=ssp-buffer-size=4
* Tue Aug 2 2005 Ville Skyttä <ville.skytta at iki.fi> - 3.4-2 * Tue Aug 2 2005 Ville Skyttä <ville.skytta at iki.fi> - 3.4-2

Loading…
Cancel
Save