diff options
author | Julien Nabet <serval2412@yahoo.fr> | 2020-04-08 23:20:42 +0200 |
---|---|---|
committer | Julien Nabet <serval2412@yahoo.fr> | 2020-04-09 11:38:44 +0200 |
commit | 11b57129b53e1e2d71a5f969e2417226b4e2ddd9 (patch) | |
tree | d57c5b464025b971e233c47142d10567dd664066 /starmath | |
parent | f4dfbba277bcfc418cb49fdc94b153c15e1ac30b (diff) |
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@yahoo.fr>
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/source/parse.cxx | 9 |
1 files changed, 7 insertions, 2 deletions
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) |