xmloff/source/text/XMLTextMarkImportContext.cxx |   11 ++++++++++-
 xmloff/source/text/txtimp.cxx                   |    1 +
 2 files changed, 11 insertions(+), 1 deletion(-)

New commits:
commit d62c93a831080ef332e416dc78f5600c2c5b9850
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Mon Feb 22 16:10:47 2021 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon Feb 22 19:10:02 2021 +0100

    tdf#140437 ODF import: fix for broken documents with field code as type
    
    Not sure how old the bug that caused this and which filter it was
    originally but currently the Word import filters don't do that any more.
    
    This causes an exception since commit
    dd24e21bb4f183048a738314934fc3f02ec093f1 so try to fix it up.
    
    Change-Id: I087586054ebd5698ed8e8a4054869df202226e92
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111345
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/xmloff/source/text/XMLTextMarkImportContext.cxx 
b/xmloff/source/text/XMLTextMarkImportContext.cxx
index 65fcd19d9625..2017d8f21a3d 100644
--- a/xmloff/source/text/XMLTextMarkImportContext.cxx
+++ b/xmloff/source/text/XMLTextMarkImportContext.cxx
@@ -197,7 +197,16 @@ static auto InsertFieldmark(SvXMLImport & rImport,
     // setup fieldmark...
     Reference<text::XFormField> const xFormField(xContent, UNO_QUERY);
     assert(xFormField.is());
-    xFormField->setFieldType(fieldmarkTypeName);
+    try {
+        xFormField->setFieldType(fieldmarkTypeName);
+    } catch (uno::RuntimeException const&) {
+        // tdf#140437 somehow old documents had the field code in the type
+        // attribute instead of field:param
+        SAL_INFO("xmloff.text", "invalid fieldmark type, converting to param");
+        // add without checking: FieldParamImporter::Import() catches 
ElementExistException
+        rHelper.addFieldParam(ODF_CODE_PARAM, fieldmarkTypeName);
+        xFormField->setFieldType(ODF_UNHANDLED);
+    }
     rHelper.setCurrentFieldParamsTo(xFormField);
     // move cursor after setFieldType as that may delete/re-insert
     rHelper.GetCursor()->gotoRange(xContent->getAnchor()->getEnd(), false);
diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx
index dc6612b113b1..e88d5ed8b2e8 100644
--- a/xmloff/source/text/txtimp.cxx
+++ b/xmloff/source/text/txtimp.cxx
@@ -390,6 +390,7 @@ namespace
             }
             catch(const ElementExistException&)
             {
+                SAL_INFO("xmloff.text", "duplicate fieldmark param");
             }
         }
     }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to