From 4153bcbc8e568e8e33c56bab68e9ea036c5dce5b Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Thu, 24 Jan 2013 22:24:44 -0500 Subject: bnc#798271: Don't delete the PropertyMapEntry instance prematurely. When using comphelper::PropertyMapEntry array to create a UNO property set, we need to make sure we keep this instance while the property set object is alive, else it would cause a very hard-to-debug problem down the road... In this particular case, the aExportInfoMap array instance was destroyed when it went out of scope, but the xInfoSet which references it was used afterward. Change-Id: I02132b6b2e6bef7b461f0f77c2c4a3e911e42014 --- chart2/source/model/filter/XMLFilter.cxx | 40 +++++++++++++++----------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'chart2') diff --git a/chart2/source/model/filter/XMLFilter.cxx b/chart2/source/model/filter/XMLFilter.cxx index 2a6e35b3df84..551e9b29daa3 100644 --- a/chart2/source/model/filter/XMLFilter.cxx +++ b/chart2/source/model/filter/XMLFilter.cxx @@ -644,28 +644,26 @@ sal_Int32 XMLFilter::impl_Export( xServiceFactory->createInstanceWithArguments( C2U("com.sun.star.comp.Svx.GraphicExportHelper"), aGraphicResolverArgs ), uno::UNO_QUERY ); - uno::Reference< beans::XPropertySet > xInfoSet; + // property map for export info set + comphelper::PropertyMapEntry aExportInfoMap[] = { - // property map for export info set - comphelper::PropertyMapEntry aExportInfoMap[] = - { - { MAP_LEN("UsePrettyPrinting"), 0, &::getBooleanCppuType(), beans::PropertyAttribute::MAYBEVOID, 0}, - { MAP_LEN("BaseURI"), 0, &::getCppuType( (OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 }, - { MAP_LEN("StreamRelPath"), 0, &::getCppuType( (OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 }, - { MAP_LEN("StreamName"), 0, &::getCppuType( (OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 }, - { MAP_LEN("ExportTableNumberList"), 0, &::getBooleanCppuType(), beans::PropertyAttribute::MAYBEVOID, 0 }, - { NULL, 0, 0, NULL, 0, 0 } - }; - - xInfoSet = comphelper::GenericPropertySet_CreateInstance( new comphelper::PropertySetInfo( aExportInfoMap ) ); - - SvtSaveOptions aSaveOpt; - OUString sUsePrettyPrinting(RTL_CONSTASCII_USTRINGPARAM("UsePrettyPrinting")); - sal_Bool bUsePrettyPrinting( aSaveOpt.IsPrettyPrinting() ); - xInfoSet->setPropertyValue( sUsePrettyPrinting, uno::makeAny( bUsePrettyPrinting ) ); - if( ! bOasis ) - xInfoSet->setPropertyValue( C2U("ExportTableNumberList"), uno::makeAny( true )); - } + { MAP_LEN("UsePrettyPrinting"), 0, &::getBooleanCppuType(), beans::PropertyAttribute::MAYBEVOID, 0}, + { MAP_LEN("BaseURI"), 0, &::getCppuType( (OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 }, + { MAP_LEN("StreamRelPath"), 0, &::getCppuType( (OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 }, + { MAP_LEN("StreamName"), 0, &::getCppuType( (OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 }, + { MAP_LEN("ExportTableNumberList"), 0, &::getBooleanCppuType(), beans::PropertyAttribute::MAYBEVOID, 0 }, + { NULL, 0, 0, NULL, 0, 0 } + }; + + uno::Reference< beans::XPropertySet > xInfoSet = + comphelper::GenericPropertySet_CreateInstance( new comphelper::PropertySetInfo( aExportInfoMap ) ); + + SvtSaveOptions aSaveOpt; + OUString sUsePrettyPrinting(RTL_CONSTASCII_USTRINGPARAM("UsePrettyPrinting")); + sal_Bool bUsePrettyPrinting( aSaveOpt.IsPrettyPrinting() ); + xInfoSet->setPropertyValue( sUsePrettyPrinting, uno::makeAny( bUsePrettyPrinting ) ); + if( ! bOasis ) + xInfoSet->setPropertyValue( C2U("ExportTableNumberList"), uno::makeAny( true )); sal_Int32 nArgs = 2; if( xGraphicObjectResolver.is()) -- cgit