mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-08 06:53:45 +00:00
ICU-13394 nul-terminated buffer handling fixed from Chromium.
X-SVN-Rev: 40615
This commit is contained in:
parent
3db8233029
commit
1c794eb111
4 changed files with 14 additions and 3 deletions
|
@ -821,6 +821,8 @@ uloc_getDisplayKeywordValue( const char* locale,
|
|||
/* get the keyword value */
|
||||
keywordValue[0]=0;
|
||||
keywordValueLen = uloc_getKeywordValue(locale, keyword, keywordValue, capacity, status);
|
||||
if (*status == U_STRING_NOT_TERMINATED_WARNING)
|
||||
*status = U_BUFFER_OVERFLOW_ERROR;
|
||||
|
||||
/*
|
||||
* if the keyword is equal to currency .. then to get the display name
|
||||
|
|
|
@ -636,8 +636,9 @@ LocaleDisplayNamesImpl::localeDisplayName(const Locale& locale,
|
|||
char value[ULOC_KEYWORD_AND_VALUES_CAPACITY]; // sigh, no ULOC_VALUE_CAPACITY
|
||||
const char* key;
|
||||
while ((key = e->next((int32_t *)0, status)) != NULL) {
|
||||
value[0] = 0;
|
||||
locale.getKeywordValue(key, value, ULOC_KEYWORD_AND_VALUES_CAPACITY, status);
|
||||
if (U_FAILURE(status)) {
|
||||
if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
|
||||
return result;
|
||||
}
|
||||
keyDisplayName(key, temp, TRUE);
|
||||
|
|
|
@ -2230,6 +2230,7 @@ ucurr_countCurrencies(const char* locale,
|
|||
UErrorCode localStatus = U_ZERO_ERROR;
|
||||
char id[ULOC_FULLNAME_CAPACITY];
|
||||
uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus);
|
||||
|
||||
// get country or country_variant in `id'
|
||||
/*uint32_t variantType =*/ idForLocale(locale, id, sizeof(id), ec);
|
||||
|
||||
|
|
|
@ -465,8 +465,15 @@ ucol_prepareShortStringOpen( const char *definition,
|
|||
UResourceBundle *collElem = NULL;
|
||||
char keyBuffer[256];
|
||||
// if there is a keyword, we pick it up and try to get elements
|
||||
if(!uloc_getKeywordValue(buffer, "collation", keyBuffer, 256, status)) {
|
||||
// no keyword. we try to find the default setting, which will give us the keyword value
|
||||
int32_t keyLen = uloc_getKeywordValue(buffer, "collation", keyBuffer, sizeof(keyBuffer), status);
|
||||
// Treat too long a value as no keyword.
|
||||
if(keyLen >= (int32_t)sizeof(keyBuffer)) {
|
||||
keyLen = 0;
|
||||
*status = U_ZERO_ERROR;
|
||||
}
|
||||
if(keyLen == 0) {
|
||||
// no keyword
|
||||
// we try to find the default setting, which will give us the keyword value
|
||||
UResourceBundle *defaultColl = ures_getByKeyWithFallback(collations, "default", NULL, status);
|
||||
if(U_SUCCESS(*status)) {
|
||||
int32_t defaultKeyLen = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue