diff options
Diffstat (limited to 'sal/rtl')
-rw-r--r-- | sal/rtl/strtmpl.cxx | 10 | ||||
-rw-r--r-- | sal/rtl/ustring.cxx | 27 |
2 files changed, 24 insertions, 13 deletions
diff --git a/sal/rtl/strtmpl.cxx b/sal/rtl/strtmpl.cxx index 8ff170767b18..082dcd7d3913 100644 --- a/sal/rtl/strtmpl.cxx +++ b/sal/rtl/strtmpl.cxx @@ -145,9 +145,13 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compare_WithLength )( const IMPL_RTL_STRCOD sal_Int32 nRet = nStr1Len - nStr2Len; int nCount = (nRet <= 0) ? nStr1Len : nStr2Len; - --pStr1; - --pStr2; - while( (--nCount >= 0) && (*++pStr1 == *++pStr2) ) ; + while( --nCount >= 0 ) { + if (*pStr1 != *pStr2) { + break; + } + ++pStr1; + ++pStr2; + } if( nCount >= 0 ) nRet = static_cast<sal_Int32>(IMPL_RTL_USTRCODE( *pStr1 )) diff --git a/sal/rtl/ustring.cxx b/sal/rtl/ustring.cxx index 7b6687f74bd5..f84e3e1bd2d4 100644 --- a/sal/rtl/ustring.cxx +++ b/sal/rtl/ustring.cxx @@ -636,7 +636,7 @@ void rtl_uString_newConcatUtf16L( { assert(newString != nullptr); assert(left != nullptr); - assert(right != nullptr); + assert(right != nullptr || rightLength == 0); assert(rightLength >= 0); if (left->length > std::numeric_limits<sal_Int32>::max() - rightLength) { #if !defined(__COVERITY__) @@ -650,9 +650,11 @@ void rtl_uString_newConcatUtf16L( sal_Int32 n = left->length + rightLength; rtl_uString_assign(newString, left); rtl_uString_ensureCapacity(newString, n); - memcpy( - (*newString)->buffer + (*newString)->length, right, - rightLength * sizeof (sal_Unicode)); + if (rightLength != 0) { + memcpy( + (*newString)->buffer + (*newString)->length, right, + rightLength * sizeof (sal_Unicode)); + } (*newString)->buffer[n] = 0; (*newString)->length = n; } @@ -1316,7 +1318,7 @@ void rtl_uString_newReplaceFirstAsciiLUtf16L( assert(index != nullptr); assert(*index >= 0 && *index <= str->length); assert(fromLength >= 0); - assert(to != nullptr); + assert(to != nullptr || toLength == 0); assert(toLength >= 0); sal_Int32 i = rtl_ustr_indexOfAscii_WithLength( str->buffer + *index, str->length - *index, from, fromLength); @@ -1338,8 +1340,10 @@ void rtl_uString_newReplaceFirstAsciiLUtf16L( assert(i >= 0 && i < str->length); memcpy( (*newStr)->buffer, str->buffer, i * sizeof (sal_Unicode)); - memcpy( - (*newStr)->buffer + i, to, toLength * sizeof (sal_Unicode)); + if (toLength != 0) { + memcpy( + (*newStr)->buffer + i, to, toLength * sizeof (sal_Unicode)); + } memcpy( (*newStr)->buffer + i + toLength, str->buffer + i + fromLength, @@ -1405,8 +1409,9 @@ void rtl_uString_newReplaceFirstUtf16LUtf16L( assert(str != nullptr); assert(index != nullptr); assert(*index >= 0 && *index <= str->length); + assert(from != nullptr || fromLength == 0); assert(fromLength >= 0); - assert(to != nullptr); + assert(to != nullptr || toLength == 0); assert(toLength >= 0); sal_Int32 i = rtl_ustr_indexOfStr_WithLength( str->buffer + *index, str->length - *index, from, fromLength); @@ -1428,8 +1433,10 @@ void rtl_uString_newReplaceFirstUtf16LUtf16L( assert(i >= 0 && i < str->length); memcpy( (*newStr)->buffer, str->buffer, i * sizeof (sal_Unicode)); - memcpy( - (*newStr)->buffer + i, to, toLength * sizeof (sal_Unicode)); + if (toLength != 0) { + memcpy( + (*newStr)->buffer + i, to, toLength * sizeof (sal_Unicode)); + } memcpy( (*newStr)->buffer + i + toLength, str->buffer + i + fromLength, |