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:
George Rhoten 2001-12-04 02:16:58 +00:00
parent 8824cc7909
commit 37279d71cc
3 changed files with 7 additions and 9 deletions

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {