mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-13 08:53:20 +00:00
ICU-1211 Don't go beyond the end of the array (fix for Solaris, Windows, HP/UX)
X-SVN-Rev: 7304
This commit is contained in:
parent
8824cc7909
commit
37279d71cc
3 changed files with 7 additions and 9 deletions
icu4c/source/i18n
|
@ -157,9 +157,9 @@ void TitlecaseTransliterator::handleTransliterate(
|
|||
if (doTitle) {
|
||||
newLen = u_internalTitleCase(cp, buffer, u_getMaxCaseExpansion(), loc.getName());
|
||||
} else {
|
||||
u_strToLower(buffer, u_getMaxCaseExpansion(), original.getBuffer()+s, i-s, loc.getName(), &status);
|
||||
UTF_GET_CHAR(buffer, 0, s, u_strlen(buffer), bufferCH);
|
||||
newLen = bufferCH == original.char32At(s) ? -1 : u_strlen(buffer);
|
||||
int32_t len = u_strToLower(buffer, u_getMaxCaseExpansion(), original.getBuffer()+s, i-s, loc.getName(), &status);
|
||||
UTF_GET_CHAR(buffer, 0, 0, len, bufferCH);
|
||||
newLen = (bufferCH == original.char32At(s) ? -1 : len);
|
||||
}
|
||||
doTitle = !CASED->contains(cp);
|
||||
if (newLen >= 0) {
|
||||
|
|
|
@ -97,11 +97,10 @@ void LowercaseTransliterator::handleTransliterate(Replaceable& text,
|
|||
UTF_GET_CHAR(original.getBuffer(), 0, i, original.length(), cp);
|
||||
oldLen = UTF_CHAR_LENGTH(cp);
|
||||
i += oldLen;
|
||||
u_strToLower(buffer, u_getMaxCaseExpansion(), original.getBuffer()+s, i-s, loc.getName(), &status);
|
||||
int32_t len = u_strToLower(buffer, u_getMaxCaseExpansion(), original.getBuffer()+s, i-s, loc.getName(), &status);
|
||||
/* Skip checking of status code here because the buffer should not have overflowed. */
|
||||
UTF_GET_CHAR(buffer, 0, s, u_strlen(buffer), cp);
|
||||
UTF_GET_CHAR(buffer, 0, 0, len, cp);
|
||||
if ( bufferCH != cp ) {
|
||||
int len = u_strlen(buffer);
|
||||
UnicodeString temp(buffer);
|
||||
text.handleReplaceBetween(textPos, textPos + oldLen, temp);
|
||||
if (len != oldLen) {
|
||||
|
|
|
@ -100,11 +100,10 @@ void UppercaseTransliterator::handleTransliterate(Replaceable& text,
|
|||
UTF_GET_CHAR(original.getBuffer(), 0, i, original.length(), cp);
|
||||
oldLen = UTF_CHAR_LENGTH(cp);
|
||||
i += oldLen;
|
||||
u_strToUpper(buffer, u_getMaxCaseExpansion(), original.getBuffer()+s, i-s, loc.getName(), &status);
|
||||
int32_t len = u_strToUpper(buffer, u_getMaxCaseExpansion(), original.getBuffer()+s, i-s, loc.getName(), &status);
|
||||
/* Skip checking of status code here because the buffer should not have overflowed. */
|
||||
UTF_GET_CHAR(buffer, 0, s, u_strlen(buffer), cp);
|
||||
UTF_GET_CHAR(buffer, 0, 0, len, cp);
|
||||
if (bufferCH != cp) {
|
||||
int len = u_strlen(buffer);
|
||||
UnicodeString temp(buffer);
|
||||
text.handleReplaceBetween(textPos, textPos + oldLen, temp);
|
||||
if (len != oldLen) {
|
||||
|
|
Loading…
Add table
Reference in a new issue