summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/rtfimport/data/fdo64637.rtf13
-rw-r--r--sw/qa/extras/rtfimport/rtfimport.cxx10
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx9
3 files changed, 30 insertions, 2 deletions
diff --git a/sw/qa/extras/rtfimport/data/fdo64637.rtf b/sw/qa/extras/rtfimport/data/fdo64637.rtf
new file mode 100644
index 000000000000..9bec690cde23
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo64637.rtf
@@ -0,0 +1,13 @@
+{\rtf1
+{\info
+{\upr
+{\company aaa}
+{\*\ud
+{\company
+bbb
+}
+}
+}
+}
+foo
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 58353bff2fb2..9a6974f15767 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -146,6 +146,7 @@ public:
void testFdo39001();
void testFdo66565();
void testFdo54900();
+ void testFdo64637();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -279,6 +280,7 @@ void Test::run()
{"fdo39001.rtf", &Test::testFdo39001},
{"fdo66565.rtf", &Test::testFdo66565},
{"fdo54900.rtf", &Test::testFdo54900},
+ {"fdo64637.rtf", &Test::testFdo64637},
};
header();
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
@@ -1343,6 +1345,14 @@ void Test::testFdo54900()
CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_CENTER, static_cast<style::ParagraphAdjust>(getProperty<sal_Int16>(getParagraphOfText(1, xCell->getText()), "ParaAdjust")));
}
+void Test::testFdo64637()
+{
+ // The problem was that the custom "Company" property was added twice, the second invocation resulted in an exception.
+ uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xPropertySet(xDocumentPropertiesSupplier->getDocumentProperties()->getUserDefinedProperties(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("bbb"), getProperty<OUString>(xPropertySet, "Company"));
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 5e93fc27e6df..769191b45241 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -4006,11 +4006,16 @@ int RTFDocumentImpl::popState()
case DESTINATION_COMPANY:
{
OUString aName = aState.nDestinationState == DESTINATION_OPERATOR ? OUString("Operator") : OUString("Company");
+ uno::Any aValue = uno::makeAny(m_aStates.top().aDestinationText.makeStringAndClear());
if (m_xDocumentProperties.is())
{
uno::Reference<beans::XPropertyContainer> xUserDefinedProperties = m_xDocumentProperties->getUserDefinedProperties();
- xUserDefinedProperties->addProperty(aName, beans::PropertyAttribute::REMOVABLE,
- uno::makeAny(m_aStates.top().aDestinationText.makeStringAndClear()));
+ uno::Reference<beans::XPropertySet> xPropertySet(xUserDefinedProperties, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo();
+ if (xPropertySetInfo->hasPropertyByName(aName))
+ xPropertySet->setPropertyValue(aName, aValue);
+ else
+ xUserDefinedProperties->addProperty(aName, beans::PropertyAttribute::REMOVABLE, aValue);
}
}
break;