>From 3905c71ebeb7f1a0c5607c18a61abeb7c62574be Mon Sep 17 00:00:00 2001
From: Urmas <[email protected]>
Date: Sun, 26 May 2013 02:06:22 +0700
Subject: [PATCH] fdo#64671 Some special RTF characters were not skipped
correctly
Some special characters, like { and }, were not skipped when they
occured as a replacement character for \uN keyword.
Change-Id: I54c5ee67179f927f70fc7cac1b3f896017077d62
---
writerfilter/source/rtftok/rtfdocumentimpl.cxx | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index a5e3f75..07070a4 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -887,9 +887,10 @@ int RTFDocumentImpl::resolveChars(char ch)
bool bUnicodeChecked = false;
bool bSkipped = false;
- while(!Strm().IsEof() && ch != '{' && ch != '}' && ch != '\\')
+ bool bHex = (m_aStates.top().nInternalState == INTERNAL_HEX);
+ while(bHex || !Strm().IsEof() && ch != '{' && ch != '}' && ch != '\\')
{
- if (m_aStates.top().nInternalState == INTERNAL_HEX || (ch != 0x0d && ch != 0x0a))
+ if (bHex || (ch != 0x0d && ch != 0x0a))
{
if (m_aStates.top().nCharsToSkip == 0)
{
@@ -907,7 +908,7 @@ int RTFDocumentImpl::resolveChars(char ch)
}
}
// read a single char if we're in hex mode
- if (m_aStates.top().nInternalState == INTERNAL_HEX)
+ if (bHex)
break;
Strm() >> ch;
}
@@ -1714,6 +1715,11 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword)
}
if (cCh > 0)
{
+ if (m_aStates.top().nCharsToSkip > 0)
+ {
+ m_aStates.top().nCharsToSkip--;
+ return 0;
+ }
OUString aStr(OStringToOUString(OString(cCh), RTL_TEXTENCODING_MS_1252));
text(aStr);
return 0;
--
1.8.1.2
_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice