From 00a658ff104623d4e7fc984b5fc82d1a7e2607f2 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Sat, 26 Jun 2021 19:26:40 +0100 Subject: ofz#35597 Null-dereference READ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add a check for null getTextBody() return unfold it a bit while I'm at it Change-Id: Ib0286048536ad576b520e1adb08fa9b36da9243f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117938 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- oox/source/ppt/pptshape.cxx | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'oox') diff --git a/oox/source/ppt/pptshape.cxx b/oox/source/ppt/pptshape.cxx index f1c4a892ac14..7f3786c41992 100644 --- a/oox/source/ppt/pptshape.cxx +++ b/oox/source/ppt/pptshape.cxx @@ -92,7 +92,7 @@ static const char* lclDebugSubType( sal_Int32 nType ) namespace { -bool ShapeHasNoVisualPropertiesOnImport(oox::ppt::PPTShape& rPPTShape) +bool ShapeHasNoVisualPropertiesOnImport(const oox::ppt::PPTShape& rPPTShape) { return !rPPTShape.hasNonInheritedShapeProperties() && !rPPTShape.hasShapeStyleRefs() @@ -128,6 +128,23 @@ oox::drawingml::TextListStylePtr PPTShape::getSubTypeTextListStyle( const SlideP return pTextListStyle; } +bool PPTShape::IsPlaceHolderCandidate(const SlidePersist& rSlidePersist) const +{ + if (meShapeLocation != Slide) + return false; + if (rSlidePersist.isNotesPage()) + return false; + auto pTextBody = getTextBody(); + if (!pTextBody) + return false; + auto rParagraphs = pTextBody->getParagraphs(); + if (rParagraphs.size() != 1) + return false; + if (rParagraphs.front()->getRuns().size() != 1) + return false; + return ShapeHasNoVisualPropertiesOnImport(*this); +} + void PPTShape::addShape( oox::core::XmlFilterBase& rFilterBase, const SlidePersist& rSlidePersist, @@ -195,10 +212,7 @@ void PPTShape::addShape( } break; case XML_dt : - if ( meShapeLocation == Slide && !rSlidePersist.isNotesPage() - && getTextBody()->getParagraphs().size() == 1 - && getTextBody()->getParagraphs().front()->getRuns().size() == 1 - && ShapeHasNoVisualPropertiesOnImport(*this) ) + if (IsPlaceHolderCandidate(rSlidePersist)) { TextRunPtr& pTextRun = getTextBody()->getParagraphs().front()->getRuns().front(); oox::drawingml::TextField* pTextField = dynamic_cast(pTextRun.get()); @@ -234,10 +248,7 @@ void PPTShape::addShape( bClearText = true; break; case XML_ftr : - if ( meShapeLocation == Slide && !rSlidePersist.isNotesPage() - && getTextBody()->getParagraphs().size() == 1 - && getTextBody()->getParagraphs().front()->getRuns().size() == 1 - && ShapeHasNoVisualPropertiesOnImport(*this) ) + if (IsPlaceHolderCandidate(rSlidePersist)) { const OUString& rFooterText = getTextBody()->toString(); @@ -255,10 +266,7 @@ void PPTShape::addShape( bClearText = true; break; case XML_sldNum : - if (meShapeLocation == Slide && !rSlidePersist.isNotesPage() - && getTextBody()->getParagraphs().size() == 1 - && getTextBody()->getParagraphs().front()->getRuns().size() == 1 - && ShapeHasNoVisualPropertiesOnImport(*this)) + if (IsPlaceHolderCandidate(rSlidePersist)) { TextRunPtr& pTextRun = getTextBody()->getParagraphs().front()->getRuns().front(); -- cgit