[Libreoffice-commits] core.git: sw/qa writerfilter/source

Mike Kaganski mike.kaganski at collabora.com
Mon Dec 7 01:38:01 PST 2015


 sw/qa/extras/rtfimport/data/tdf54584.rtf          |    4 ++++
 sw/qa/extras/rtfimport/rtfimport.cxx              |   10 ++++++++++
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |    7 +++++++
 3 files changed, 21 insertions(+)

New commits:
commit a800cc780b60d61fd871ec5598c80a431e13903f
Author: Mike Kaganski <mike.kaganski at collabora.com>
Date:   Sun Dec 6 21:39:11 2015 +1000

    tdf#54584: allow backslash before field type in RTF and DOCX
    
    In some RTF and DOCX files, field type may be prepended with
    backslash. It seems not strictly standard-conformant (at least
    not to [MS-RTF]). Still, MS Word reads these fields OK. This patch
    allows LO to read them, too.
    
    Change-Id: I1f6bbdd9d57adbea8882d078761dd97298ca03b3
    Reviewed-on: https://gerrit.libreoffice.org/20420
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sw/qa/extras/rtfimport/data/tdf54584.rtf b/sw/qa/extras/rtfimport/data/tdf54584.rtf
new file mode 100644
index 0000000..2a497de
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/tdf54584.rtf
@@ -0,0 +1,4 @@
+{\rtf1
+{\footer
+Page {\field{\*\fldinst \\PAGE}}}
+text}
\ No newline at end of file
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 36eaf03..17cae46 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -2373,6 +2373,16 @@ DECLARE_RTFIMPORT_TEST(testTdf59454, "tdf59454.rtf")
     CPPUNIT_ASSERT_EQUAL(2, getPages());
 }
 
+DECLARE_RTFIMPORT_TEST(testTdf54584, "tdf54584.rtf")
+{
+    uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
+    uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+    // \PAGE was ignored, so no fields were in document -> exception was thrown
+    CPPUNIT_ASSERT_NO_THROW_MESSAGE("No fields in document found: field \"\\PAGE\" was not properly read",
+        xFields->nextElement());
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 2d858d4..8e079ea 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2292,6 +2292,13 @@ lcl_SplitFieldCommand(const OUString& rCommand)
     std::vector<OUString> arguments;
     std::vector<OUString> switches;
     sal_Int32 nStartIndex(0);
+    // tdf#54584: Field may be prepended by a backslash - skip it
+    if ((rCommand.getLength() >= nStartIndex + 2) &&
+        (rCommand[nStartIndex] == '\\') &&
+        (rCommand[nStartIndex + 1] != '\\'))
+    {
+        ++nStartIndex;
+    }
 
     do
     {


More information about the Libreoffice-commits mailing list