From 37279d71cc9e47ec782a43220fcea131acc501a0 Mon Sep 17 00:00:00 2001 From: George Rhoten Date: Tue, 4 Dec 2001 02:16:58 +0000 Subject: [PATCH] ICU-1211 Don't go beyond the end of the array (fix for Solaris, Windows, HP/UX) X-SVN-Rev: 7304 --- icu4c/source/i18n/titletrn.cpp | 6 +++--- icu4c/source/i18n/tolowtrn.cpp | 5 ++--- icu4c/source/i18n/toupptrn.cpp | 5 ++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/icu4c/source/i18n/titletrn.cpp b/icu4c/source/i18n/titletrn.cpp index e018b0214e8..c97ee445664 100644 --- a/icu4c/source/i18n/titletrn.cpp +++ b/icu4c/source/i18n/titletrn.cpp @@ -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) { diff --git a/icu4c/source/i18n/tolowtrn.cpp b/icu4c/source/i18n/tolowtrn.cpp index 76d8a98ff36..daa1eadd984 100644 --- a/icu4c/source/i18n/tolowtrn.cpp +++ b/icu4c/source/i18n/tolowtrn.cpp @@ -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) { diff --git a/icu4c/source/i18n/toupptrn.cpp b/icu4c/source/i18n/toupptrn.cpp index 1ed1a491d73..a6a89e2825f 100644 --- a/icu4c/source/i18n/toupptrn.cpp +++ b/icu4c/source/i18n/toupptrn.cpp @@ -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) {