[Libreoffice-commits] core.git: Branch 'libreoffice-5-3' - sw/qa writerfilter/source

Michael Stahl mstahl at redhat.com
Fri Feb 24 08:48:40 UTC 2017


 sw/qa/extras/rtfimport/data/hexcrlf.rtf        |    4 ++++
 sw/qa/extras/rtfimport/rtfimport.cxx           |   10 ++++++++++
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |   14 +++++++++++++-
 3 files changed, 27 insertions(+), 1 deletion(-)

New commits:
commit 7a26194b05029f68e58ff71285c7be1c5b4c2c42
Author: Michael Stahl <mstahl at redhat.com>
Date:   Thu Feb 23 15:33:55 2017 +0100

    writerfilter: RTF import: hex-escaped \r and \n create paragraph break
    
    ... in Word 2010, while the spec doesn't say what they do.
    So just handle \'0d and \'0a like \par.
    
    This fixes an assert failure on importing lp556169-2.rtf, where
    insertTextPortion was called with a string containing "\r", which split
    the paragraph and that messed up the SwPaM.
    
    Change-Id: Iee8b5b47e15d18232de841adfbc9c6498727c384
    (cherry picked from commit 10e733908038407791f9c14af2a86417cc4a653c)
    Reviewed-on: https://gerrit.libreoffice.org/34584
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sw/qa/extras/rtfimport/data/hexcrlf.rtf b/sw/qa/extras/rtfimport/data/hexcrlf.rtf
new file mode 100644
index 0000000..7c7ed1a
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/hexcrlf.rtf
@@ -0,0 +1,4 @@
+{\rtf1
+foo\'0dba
+r\'0abaz\'0d\'0aquux
+\par }
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index c860f3d..54e4758 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -1099,6 +1099,16 @@ DECLARE_RTFIMPORT_TEST(testFdo59419, "fdo59419.rtf")
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
 }
 
+DECLARE_RTFIMPORT_TEST(testHexCRLF, "hexcrlf.rtf")
+{
+    // hex-escaped \r and \n should create a paragraph break
+    getParagraph(1, "foo");
+    getParagraph(2, "bar");
+    getParagraph(3, "baz");
+    getParagraph(4, "");
+    getParagraph(5, "quux");
+}
+
 DECLARE_RTFIMPORT_TEST(testFdo58076_2, "fdo58076-2.rtf")
 {
     // Position of the picture wasn't correct.
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 2264493..19bc159 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1114,7 +1114,19 @@ RTFError RTFDocumentImpl::resolveChars(char ch)
     if (m_aStates.top().nInternalState == RTFInternalState::HEX && m_aStates.top().eDestination != Destination::LEVELNUMBERS)
     {
         if (!bSkipped)
-            m_aHexBuffer.append(ch);
+        {
+            // note: apparently \'0d\'0a is interpreted as 2 breaks, not 1
+            if (m_aStates.top().eDestination != Destination::DOCCOMM
+                && (ch == '\r' || ch == '\n'))
+            {
+                checkUnicode(/*bUnicode =*/ false, /*bHex =*/ true);
+                dispatchSymbol(RTF_PAR);
+            }
+            else
+            {
+                m_aHexBuffer.append(ch);
+            }
+        }
         return RTFError::OK;
     }
 


More information about the Libreoffice-commits mailing list