From f50b72ed6c70d553d86d471ac80ffeff976c8c30 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Mon, 24 Jun 2019 13:14:12 +0200 Subject: Index on WID+memberID in SvxItemPropertySet::aCombineList ...instead of just WID. For example when loading caolan/sdrobject_getmergeditemset_null_ptr_dereference.sample (from the crashtestdata files) under UBSan, > #4 0x00007fffeeacde54 in SvxItemPropertySet::getPropertyValue(SfxItemPropertySimpleEntry const*) const (this=0x607001a356d0, pMap=0x604000ec2e60) at /home/sbergman/lo/core/editeng/source/uno/unoipset.cxx:219 > #5 0x00007fffda713cb9 in SvxShape::_getPropertyValue(rtl::OUString const&) (this=0x6150015d7980, PropertyName="CharUnderlineColor") at /home/sbergman/lo/core/svx/source/unodraw/unoshape.cxx:1775 > #6 0x00007fffda70dbe9 in SvxShape::getPropertyValue(rtl::OUString const&) (this=0x6150015d7980, PropertyName="CharUnderlineColor") at /home/sbergman/lo/core/svx/source/unodraw/unoshape.cxx:1721 > #7 0x00007fffda713f3e in non-virtual thunk to SvxShape::getPropertyValue(rtl::OUString const&) () at /home/sbergman/lo/core/instdir/program/libsvxcorelo.so > #8 0x00007fff19e8cfa6 in SwXShape::_getPropAtAggrObj(rtl::OUString const&) (this=0x610000183540, _rPropertyName="CharUnderlineColor") at /home/sbergman/lo/core/sw/source/core/unocore/unodraw.cxx:1735 > #9 0x00007fff19e8b511 in SwXShape::getPropertyValue(rtl::OUString const&) (this=0x610000183540, rPropertyName="CharUnderlineColor") at /home/sbergman/lo/core/sw/source/core/unocore/unodraw.cxx:1665 [...] would first store an Any with value sal_Int32 -1 (representing an RGBA 255/255/255/255 color) in aCombineList for property CharUnderlineColor with WID = EE_CHAR_UNDERLINE = 4027 and member-ID = MID_TL_COLOR = 2, but then read back out that Any for property CharUnderline with the same WID but member-ID = MID_TL_STYLE = 1 and use it at > include/svl/eitem.hxx:47:20: runtime error: load of value 4294967295, which is not a valid value for type 'FontLineStyle' > #0 in SfxEnumItem::SetValue(FontLineStyle) at include/svl/eitem.hxx:47:20 > #1 in SvxTextLineItem::PutValue(com::sun::star::uno::Any const&, unsigned char) at editeng/source/items/textitem.cxx:1016:13 > #2 in SvxItemPropertySet::setPropertyValue(SfxItemPropertySimpleEntry const*, com::sun::star::uno::Any const&, SfxItemSet&, bool) at editeng/source/uno/unoipset.cxx:178:19 > #3 in SvxItemPropertySet_setPropertyValue(SfxItemPropertySimpleEntry const*, com::sun::star::uno::Any const&, SfxItemSet&) at svx/source/unodraw/unoshape.cxx:4119:5 > #4 in SvxItemPropertySet_ObtainSettingsFromPropertySet(SvxItemPropertySet const&, SfxItemSet&, com::sun::star::uno::Reference const&, SfxItemPropertyMap const*) at svx/source/unodraw/unoshape.cxx:638:29 > #5 in SvxShape::ObtainSettingsFromPropertySet(SvxItemPropertySet const&) at svx/source/unodraw/unoshape.cxx:656:9 > #6 in SvxShape::Create(SdrObject*, SvxDrawPage*) at svx/source/unodraw/unoshape.cxx:413:5 > #7 in SvxShapeText::Create(SdrObject*, SvxDrawPage*) at svx/source/unodraw/unoshape.cxx:3867:15 > #8 in SvxDrawPage::add(com::sun::star::uno::Reference const&) at svx/source/unodraw/unopage.cxx:234:13 > #9 in SwXDrawPage::add(com::sun::star::uno::Reference const&) at sw/source/core/unocore/unodraw.cxx:597:19 > #10 in SwXShape::attach(com::sun::star::uno::Reference const&) at sw/source/core/unocore/unodraw.cxx:2056:22 [...] Change-Id: Ic0cf34440507c768b13d1b5b957425d6a43271ac Reviewed-on: https://gerrit.libreoffice.org/74635 Tested-by: Jenkins Reviewed-by: Thorsten Behrens --- sd/source/ui/unoidl/unopback.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'sd/source/ui/unoidl') diff --git a/sd/source/ui/unoidl/unopback.cxx b/sd/source/ui/unoidl/unopback.cxx index 88c2c6fb5554..09fd1309a2a6 100644 --- a/sd/source/ui/unoidl/unopback.cxx +++ b/sd/source/ui/unoidl/unopback.cxx @@ -105,7 +105,7 @@ void SdUnoPageBackground::fillItemSet( SdDrawDocument* pDoc, SfxItemSet& rSet ) for( const auto& rProp : aProperties ) { - uno::Any* pAny = mpPropSet->GetUsrAnyForID( rProp.nWID ); + uno::Any* pAny = mpPropSet->GetUsrAnyForID( rProp ); if( pAny ) { OUString aPropertyName( rProp.sName ); @@ -343,7 +343,7 @@ beans::PropertyState SAL_CALL SdUnoPageBackground::getPropertyState( const OUStr } else { - if( nullptr == mpPropSet->GetUsrAnyForID(pEntry->nWID) ) + if( nullptr == mpPropSet->GetUsrAnyForID(*pEntry) ) return beans::PropertyState_DEFAULT_VALUE; else return beans::PropertyState_DIRECT_VALUE; -- cgit