sw/qa/extras/rtfimport/data/rhbz960019.rtf | 12 ++++++++++++ sw/qa/extras/rtfimport/rtfimport.cxx | 7 +++++++ writerfilter/source/dmapper/DomainMapper_Impl.cxx | 9 ++++++--- writerfilter/source/rtftok/rtfdocumentimpl.cxx | 14 ++++++++++++-- 4 files changed, 37 insertions(+), 5 deletions(-)
New commits: commit b3944f124ab3dc87332796a46387f837ad29e8d5 Author: Michael Stahl <[email protected]> Date: Wed Jul 10 12:41:57 2013 +0200 rhbz#960019 : RTF import: handle extra groups in listoverride entry This crashed because for a single listoverride entry 2 SPRMs were sent to the domain-mapper, and the second one was empty. Change-Id: Ic41ffd8bd4edcff065f49ecef3464efedd909d63 diff --git a/sw/qa/extras/rtfimport/data/rhbz960019.rtf b/sw/qa/extras/rtfimport/data/rhbz960019.rtf new file mode 100644 index 0000000..869aa33 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/rhbz960019.rtf @@ -0,0 +1,12 @@ +{\rtf1 +{\*\listtable +{\list\listtemplateid-723955400\listsimple{\listlevel\leveljc\levelfollow0\levelspace0\levelindent0\levelstartat1{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\f0 }{\listname ;}\listid-1155484576} +} +{\*\listoverridetable +{\*\listoverride{\listid-1155484576\listoverridecount0\ls1}} +} +\pard\plain \pvpg\phpg\posx1143\posy4743\absw9615\absh-2922\dfrmtxtx72\dfrmtxty72\nowrap +Hello\par +\pard\plain\par +} + diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index bc8c7fc..4a861d5 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -153,6 +153,7 @@ public: void testFdo39001(); void testGroupshape(); void testFdo66565(); + void testRhbz960019(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -291,6 +292,7 @@ void Test::run() {"fdo39001.rtf", &Test::testFdo39001}, {"groupshape.rtf", &Test::testGroupshape}, {"fdo66565.rtf", &Test::testFdo66565}, + {"rhbz960019.rtf", &Test::testRhbz960019}, }; header(); for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) @@ -1419,6 +1421,11 @@ void Test::testFdo66565() CPPUNIT_ASSERT_EQUAL(sal_Int16(304), getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(1), "TableColumnSeparators")[0].Position); } +void Test::testRhbz960019() +{ + // used to crash due to extra group in listoverride entry +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 38dd6dc..18b3f96 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -4563,8 +4563,18 @@ int RTFDocumentImpl::popState() // list override table case DESTINATION_LISTOVERRIDEENTRY: { - RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms)); - m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pValue, false); + if (m_aStates.top().nDestinationState == DESTINATION_LISTOVERRIDEENTRY) + { // copy properties upwards so upper popState inserts it + m_aStates.top().aTableAttributes = aState.aTableAttributes; + m_aStates.top().aTableSprms = aState.aTableSprms; + } + else + { + RTFValue::Pointer_t pValue(new RTFValue( + aState.aTableAttributes, aState.aTableSprms)); + m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, + pValue, false); + } } break; case DESTINATION_LEVELTEXT: commit 1c90902cbccd4e4f5946dfc454da351c33c24f71 Author: Michael Stahl <[email protected]> Date: Wed Jul 10 12:38:16 2013 +0200 writerfilter: not every field has a Content property ... so don't try to get it unconditionally (but SetExpression does have it). (regression from c7e4264bed4e77daccf2f72063e5e00f1008c3cf) Change-Id: I14d24bd70f569ba0bc4f1e48d56ebf43c1441783 diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index f3fc0ee..badcb44 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -3399,9 +3399,12 @@ void DomainMapper_Impl::SetFieldResult( OUString& rResult ) bool bIsSetExpression = xServiceInfo->supportsService("com.sun.star.text.TextField.SetExpression"); // If we already have content set, then use the current presentation rtl::OUString sValue; - uno::Any aValue = xFieldProperties->getPropertyValue( - rPropNameSupplier.GetName(PROP_CONTENT)); - aValue >>= sValue; + if (bIsSetExpression) + { // this will throw for field types without Content + uno::Any aValue(xFieldProperties->getPropertyValue( + rPropNameSupplier.GetName(PROP_CONTENT))); + aValue >>= sValue; + } xFieldProperties->setPropertyValue( rPropNameSupplier.GetName(bIsSetExpression && sValue.isEmpty()? PROP_CONTENT : PROP_CURRENT_PRESENTATION), uno::makeAny( rResult )); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
