i18npool/source/transliteration/transliteration_body.cxx |   11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

New commits:
commit 6f7bc75dc1d0fe8227f30afc5eccdd7a9a9c4006
Author:     Julien Nabet <serval2...@yahoo.fr>
AuthorDate: Sat Dec 17 11:58:17 2022 +0100
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sat Dec 17 12:35:34 2022 +0000

    tdf#152520: Crash when using TITLE_CASE/SENTENCE_CASE in Transliteration 
module
    
    relevant part of bt:
    7  0x00007f50c85b3796 in com::sun::star::uno::Sequence<int>::realloc(int) 
(this=0x0, nSize=11) at include/com/sun/star/uno/Sequence.hxx:215
    8  0x00007f50c85d9240 in 
i18npool::transliterate_titlecase_Impl(std::basic_string_view<char16_t, 
std::char_traits<char16_t> >, int, int, com::sun::star::lang::Locale const&, 
com::sun::star::uno::Sequence<int>*) (inStr=u"AB cd. eF. ", startPos=0, 
nCount=11, rLocale=..., pOffset=0x0) at 
i18npool/source/transliteration/transliteration_body.cxx:267
    9  0x00007f50c85d955b in 
i18npool::Transliteration_sentencecase::transliterateImpl(rtl::OUString const&, 
int, int, com::sun::star::uno::Sequence<int>*)
        (this=0x557834ea0bb0, inStr="AB cd. eF. ", startPos=0, nCount=11, 
pOffset=0x0) at i18npool/source/transliteration/transliteration_body.cxx:298
    10 0x00007f50c85dcc10 in 
i18npool::transliteration_commonclass::transliterateString2String(rtl::OUString 
const&, int, int) (this=0x557834ea0bb0, inStr="AB cd. eF. ", startPos=0, 
nCount=11)
        at i18npool/source/transliteration/transliteration_commonclass.cxx:109
    11 0x00007f50c85dcc5d in non-virtual thunk to 
i18npool::transliteration_commonclass::transliterateString2String(rtl::OUString 
const&, int, int) ()
        at i18npool/source/transliteration/transliteration_commonclass.cxx:109
    12 0x00007f50c85e0d89 in 
i18npool::TransliterationImpl::transliterateString2String(rtl::OUString const&, 
int, int) (this=0x557834854dc0, inStr="AB cd. eF. ", startPos=0, nCount=11)
        at i18npool/source/transliteration/transliterationImpl.cxx:395
    
    full bt here:
    https://bugs.documentfoundation.org/attachment.cgi?id=184205
    
    Regression from:
    c7551e8a46e2f9f8142aa7921a0494221ae096e8 (speedup 
CharacterClassificationImpl::toUpper)
    
    Change-Id: I40e383fc87213d88fbde50876f61947b04190a90
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144375
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/i18npool/source/transliteration/transliteration_body.cxx 
b/i18npool/source/transliteration/transliteration_body.cxx
index 69ba0c236714..8bf5d6bdd4b1 100644
--- a/i18npool/source/transliteration/transliteration_body.cxx
+++ b/i18npool/source/transliteration/transliteration_body.cxx
@@ -264,11 +264,14 @@ static OUString transliterate_titlecase_Impl(
         // The rest of the text should just become lowercase.
         aRes = xCharClassImpl->toTitle( aResolvedLigature, 0, nResolvedLen, 
rLocale ) +
                xCharClassImpl->toLower( aText, 1, aText.getLength() - 1, 
rLocale );
-        pOffset->realloc( aRes.getLength() );
+        if (pOffset)
+        {
+            pOffset->realloc( aRes.getLength() );
 
-        auto [begin, end] = asNonConstRange(*pOffset);
-        sal_Int32* pOffsetInt = std::fill_n(begin, nResolvedLen, 0);
-        std::iota(pOffsetInt, end, 1);
+            auto [begin, end] = asNonConstRange(*pOffset);
+            sal_Int32* pOffsetInt = std::fill_n(begin, nResolvedLen, 0);
+            std::iota(pOffsetInt, end, 1);
+        }
     }
     return aRes;
 }

Reply via email to