sc/source/ui/app/inputhdl.cxx |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

New commits:
commit 10d1e6ff6b3a10b673696524ad59297f4e5a1c2c
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Thu Sep 22 18:32:13 2022 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Thu Sep 22 20:16:59 2022 +0200

    Fix string length assertion and handle parentheses in multi-line formula
    
    soffice.bin: include/rtl/ustring.hxx:842: sal_Unicode 
rtl::OUString::operator[](sal_Int32) const: Assert ion `index >= 0 && 
static_cast<sal_uInt32>(index) < static_cast<sal_uInt32>(getLength())' failed.
    
    when editing a paragraph (line) longer than the first, because the
    string was always obtained from the first paragraph but the
    position from the current selection.
    
    Also match parentheses in the current paragraph, not somewhere
    else in the first paragraph.. still we're matching only within one
    paragraph.
    
    Change-Id: I955fd371c1e248ce58735a5b61603bbce6c997db
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140446
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins

diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index a8dc8a5d7a76..ecca9785185c 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -2173,10 +2173,11 @@ void ScInputHandler::UpdateParenthesis()
             {
                 // Examine character left to the cursor
                 sal_Int32 nPos = aSel.nStartPos - 1;
-                OUString aFormula = mpEditEngine->GetText(0);
+                OUString aFormula = mpEditEngine->GetText(aSel.nStartPara);
                 sal_Unicode c = aFormula[nPos];
                 if ( c == '(' || c == ')' )
                 {
+                    // Note this matches only within one paragraph.
                     sal_Int32 nOther = lcl_MatchParenthesis( aFormula, nPos );
                     if ( nOther != -1 )
                     {
@@ -2192,9 +2193,9 @@ void ScInputHandler::UpdateParenthesis()
                                 mpEditEngine->RemoveCharAttribs( i, 
EE_CHAR_WEIGHT );
                         }
 
-                        ESelection aSelThis( 0,nPos, 0,nPos+1 );
+                        ESelection aSelThis( aSel.nStartPara, nPos, 
aSel.nStartPara, nPos+1);
                         mpEditEngine->QuickSetAttribs( aSet, aSelThis );
-                        ESelection aSelOther( 0,nOther, 0,nOther+1 );
+                        ESelection aSelOther( aSel.nStartPara, nOther, 
aSel.nStartPara, nOther+1);
                         mpEditEngine->QuickSetAttribs( aSet, aSelOther );
 
                         // Dummy InsertText for Update and Paint (selection is 
empty)

Reply via email to