Fix ToStringHelper<sal_Unicode[ N ]>

It must only add characters up to terminating null, as its counterpart
ToStringHelper< char[ N ] > does, and as its own length implies.

Was this way ever since commit f1769094af
(round out StringConcat helpers with sal_Unicode* overloads, 2019-10-11).

Change-Id: I3e267789333dac23754e67b19ff596ad359868aa
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187791
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Mike Kaganski
2025-07-13 11:47:57 +05:00
parent 3a86642a4b
commit d1ed511e42
2 changed files with 4 additions and 1 deletions

View File

@ -151,7 +151,7 @@ struct ToStringHelper<sal_Unicode[ N ]>
return std::char_traits<char16_t>::length( str );
}
sal_Unicode * operator()(sal_Unicode * buffer, sal_Unicode const str[N]) const
{ return addDataHelper(buffer, str, N - 1); }
{ return addDataString(buffer, str); }
};
template<std::size_t N>

View File

@ -73,6 +73,7 @@ void test::oustring::StringConcat::checkConcat()
CPPUNIT_ASSERT_EQUAL( u"fooxyz"_ustr, OUString( u"foo"_ustr + d2 ));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const sal_Unicode* > )), typeid( u"foo"_ustr + d2 ));
const sal_Unicode d3[] = u"xyz";
sal_Unicode d4[5] = u"xyz"; // non-const array: text is copied only up to terminating null
CPPUNIT_ASSERT_EQUAL( u"foobar"_ustr, OUString( OUString::Concat( "foo" ) + "bar" ));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( "foo" ) + "bar" ));
CPPUNIT_ASSERT_EQUAL( u"xyzbar"_ustr, OUString( OUString::Concat( d1 ) + "bar" ));
@ -83,6 +84,8 @@ void test::oustring::StringConcat::checkConcat()
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode* >, const char[ 4 ] > )), typeid( OUString::Concat( d2 ) + "bar" ));
CPPUNIT_ASSERT_EQUAL( u"xyzbar"_ustr, OUString( OUString::Concat( d3 ) + "bar" ));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d3 ) + "bar" ));
CPPUNIT_ASSERT_EQUAL( u"xyzbar"_ustr, OUString( OUString::Concat( d4 ) + "bar" ));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, sal_Unicode[ 5 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d4 ) + "bar" ));
CPPUNIT_ASSERT_EQUAL( u"num10"_ustr, OUString( u"num"_ustr + OUString::number( 10 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFINT32 > > )), typeid( u"num"_ustr + OUString::number( 10 )));