sc/source/filter/excel/xihelper.cxx |   12 ++++++------
 sc/source/filter/inc/xihelper.hxx   |    2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

New commits:
commit 6d6b4df2c2e979ab0fadc96ae20bb23e86df1ae0
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Jul 25 16:12:54 2018 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Jul 25 22:00:51 2018 +0200

    ofz#8373 tight OUString concat loop causes libfuzzer oom
    
    it doesn't get a chance to release memory and falls over with
    an oom. Or something like that anyway.
    
    Change-Id: I9d8dd704fb63d70755c6c1b211db6fe9d99cc2e5
    Reviewed-on: https://gerrit.libreoffice.org/57987
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sc/source/filter/excel/xihelper.cxx 
b/sc/source/filter/excel/xihelper.cxx
index 9ce3c500c9fa..04525d44a47c 100644
--- a/sc/source/filter/excel/xihelper.cxx
+++ b/sc/source/filter/excel/xihelper.cxx
@@ -283,7 +283,7 @@ void XclImpHFConverter::ParseString( const OUString& 
rHFString )
     meCurrObj = EXC_HF_CENTER;
 
     // parser temporaries
-    maCurrText.clear();
+    maCurrText.truncate();
     OUString aReadFont;           // current font name
     OUString aReadStyle;          // current font style
     sal_uInt16 nReadHeight = 0; // current font height
@@ -321,7 +321,7 @@ void XclImpHFConverter::ParseString( const OUString& 
rHFString )
                         InsertLineBreak();
                     break;
                     default:
-                        maCurrText += OUStringLiteral1(*pChar);
+                        maCurrText.append(OUStringLiteral1(*pChar));
                 }
             }
             break;
@@ -333,7 +333,7 @@ void XclImpHFConverter::ParseString( const OUString& 
rHFString )
                 eState = xlPSText;
                 switch( *pChar )
                 {
-                    case '&':   maCurrText += "&";  break;  // the '&' 
character
+                    case '&':   maCurrText.append("&");  break;  // the '&' 
character
 
                     case 'L':   SetNewPortion( EXC_HF_LEFT );   break;  // 
Left portion
                     case 'C':   SetNewPortion( EXC_HF_CENTER ); break;  // 
Center portion
@@ -538,9 +538,9 @@ void XclImpHFConverter::InsertText()
     if( !maCurrText.isEmpty() )
     {
         ESelection& rSel = GetCurrSel();
-        mrEE.QuickInsertText( maCurrText, ESelection( rSel.nEndPara, 
rSel.nEndPos, rSel.nEndPara, rSel.nEndPos ) );
-        rSel.nEndPos = rSel.nEndPos + maCurrText.getLength();
-        maCurrText.clear();
+        OUString sString(maCurrText.makeStringAndClear());
+        mrEE.QuickInsertText( sString, ESelection( rSel.nEndPara, 
rSel.nEndPos, rSel.nEndPara, rSel.nEndPos ) );
+        rSel.nEndPos = rSel.nEndPos + sString.getLength();
         UpdateCurrMaxLineHeight();
     }
 }
diff --git a/sc/source/filter/inc/xihelper.hxx 
b/sc/source/filter/inc/xihelper.hxx
index 8f64e2fd606c..15c76bd839d6 100644
--- a/sc/source/filter/inc/xihelper.hxx
+++ b/sc/source/filter/inc/xihelper.hxx
@@ -240,7 +240,7 @@ private:
 private:
     EditEngine&         mrEE;               /// The header/footer edit engine.
     XclImpHFPortionInfoVec maInfos;         /// Edit engine text objects for 
all portions.
-    OUString            maCurrText;         /// Current text to insert into 
edit engine.
+    OUStringBuffer      maCurrText;         /// Current text to insert into 
edit engine.
     XclFontDataPtr      mxFontData;         /// Font data of current text.
     XclImpHFPortion     meCurrObj;          /// The current portion.
 };
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to