[Libreoffice-commits] core.git: starmath/source

Julien Nabet (via logerrit) logerrit at kemper.freedesktop.org
Thu Apr 9 09:39:22 UTC 2020


 starmath/source/parse.cxx |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

New commits:
commit 11b57129b53e1e2d71a5f969e2417226b4e2ddd9
Author:     Julien Nabet <serval2412 at yahoo.fr>
AuthorDate: Wed Apr 8 23:20:42 2020 +0200
Commit:     Julien Nabet <serval2412 at yahoo.fr>
CommitDate: Thu Apr 9 11:38:44 2020 +0200

    tdf#129372: PPTX: error at SfxBaseModel::storeToStorage: 0x20d(row,col)
    
    Teach starmath how to deal with surrogate pairs
    see https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
    +
    comments from:
    https://bugs.documentfoundation.org/show_bug.cgi?id=129372#c6
    
    Here's the culprit character:
    𝜕 %uD835%uDF15
    
    I didn't dig why these 2 (found in reduced example attached to the bugtracker)
    didn't need this patch
    𝑋 %uD835%uDC4B
    𝑢 %uD835%uDC62
    
    Change-Id: I3bf2322a9e7f1974aa8622a91812aeb11e613ace
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91941
    Tested-by: Jenkins
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>

diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index 4e3b8172ca41..2f0f908d4b7b 100644
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -956,9 +956,14 @@ void SmParser::NextToken()
         m_aCurToken.cMathChar  = '\0';
         m_aCurToken.nGroup     = TG::NONE;
         m_aCurToken.nLevel     = 5;
-        m_aCurToken.aText      = m_aBufferString.copy( nRealStart, 1 );
 
-        aRes.EndPos = nRealStart + 1;
+        // tdf#129372: we may have to deal with surrogate pairs
+        // (see https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates)
+        // in this case, we must read 2 sal_Unicode instead of 1
+        int nOffset(rtl::isSurrogate(m_aBufferString[nRealStart])? 2 : 1);
+        m_aCurToken.aText      = m_aBufferString.copy( nRealStart, nOffset );
+
+        aRes.EndPos = nRealStart + nOffset;
     }
 
     if (TEND != m_aCurToken.eType)


More information about the Libreoffice-commits mailing list