diff --git a/oox/source/export/ThemeExport.cxx b/oox/source/export/ThemeExport.cxx index bdd79016aac7..986f804df6e1 100644 --- a/oox/source/export/ThemeExport.cxx +++ b/oox/source/export/ThemeExport.cxx @@ -903,6 +903,7 @@ bool ThemeExport::writeColorSet(model::Theme const& rTheme) // drawingML alpha is a percentage on a 0..100000 scale. sal_Int32 nAlpha = aColor.GetAlpha() * oox::drawingml::MAX_PERCENT / 255; + assert(nAlpha >= 0); mpFS->singleElementNS(XML_a, XML_alpha, XML_val, OUString::number(nAlpha)); mpFS->endElementNS(XML_a, XML_srgbClr); diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 256e7ecdf600..e6608a4fb4dc 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -363,6 +363,7 @@ void DrawingML::WriteColor( ::Color nColor, sal_Int32 nAlpha ) if( nAlpha < MAX_PERCENT ) { mpFS->startElementNS(XML_a, XML_srgbClr, XML_val, sColor); + assert(nAlpha >= 0); mpFS->singleElementNS(XML_a, XML_alpha, XML_val, OString::number(nAlpha)); mpFS->endElementNS( XML_a, XML_srgbClr ); @@ -409,6 +410,7 @@ void DrawingML::WriteColor( const ::Color nColor, const Sequence< PropertyValue else if(nAlpha < MAX_PERCENT) { mpFS->startElementNS(XML_a, XML_srgbClr, XML_val, sColor); + assert(nAlpha >= 0); mpFS->singleElementNS(XML_a, XML_alpha, XML_val, OString::number(nAlpha)); mpFS->endElementNS(XML_a, XML_srgbClr); } @@ -427,6 +429,7 @@ void DrawingML::WriteColorTransformations( const Sequence< PropertyValue >& aTra { if(nToken == XML_alpha && nAlpha < MAX_PERCENT) { + assert(nAlpha >= 0); mpFS->singleElementNS(XML_a, nToken, XML_val, OString::number(nAlpha)); } else diff --git a/xmloff/source/style/xmlbahdl.cxx b/xmloff/source/style/xmlbahdl.cxx index a59abbdeed04..2749cff5356b 100644 --- a/xmloff/source/style/xmlbahdl.cxx +++ b/xmloff/source/style/xmlbahdl.cxx @@ -455,8 +455,14 @@ bool XMLNegPercentPropHdl::importXML( const OUString& rStrImpValue, Any& rValue, { sal_Int32 nValue = 0; bool bRet = ::sax::Converter::convertPercent( nValue, rStrImpValue ); - if (bRet) - bRet = !o3tl::checked_sub(100, nValue, nValue); + if (!bRet) + return false; + if (nValue < 0 || nValue > 100) + { + SAL_WARN("xmloff", "Percentage property out of range, ignoring"); + return false; + } + bRet = !o3tl::checked_sub(100, nValue, nValue); if (bRet) lcl_xmloff_setAny( rValue, nValue, nBytes ); return bRet;