summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2017-02-10 14:33:51 +0100
committerCaolán McNamara <caolanm@redhat.com>2017-02-14 16:31:04 +0000
commit3ad76f312bfe1161201ff44e523623729dd80738 (patch)
tree7ecb9a139da00137f37f3fbd71573316d57e3466
parentbf2890a2f619b8cf885627ded1547cf0f5a6a10f (diff)
Related: tdf#105707 PPTX import: warn on invalid/empty SmartArt fallback relid
We already warn when the SmartArt doesn't have a drawingML fallback, but having a reference to a fallback that is not a valid one (so resolves to an empty fragment path) is also unusable. So warn in that case as well. (cherry picked from commit 2d732b498bab244cde6978e9389511a940101995) This second related situation is about when there is drawingML fallback for the SmartArt, but it's ampty shape tree, which is never created with MSO2010+ (those shape trees always have at least one element). This is as bad as the missing drawingML fallback, so warn on it. (cherry picked from commit 8c6776f27cef1e2b7b40957f1801b08707bc3230) Change-Id: I03b2325003b4eb38b1347a88899799c6d5c33606 Reviewed-on: https://gerrit.libreoffice.org/34196 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--oox/source/drawingml/graphicshapecontext.cxx12
-rw-r--r--oox/source/ppt/extdrawingfragmenthandler.cxx5
2 files changed, 16 insertions, 1 deletions
diff --git a/oox/source/drawingml/graphicshapecontext.cxx b/oox/source/drawingml/graphicshapecontext.cxx
index b58bf56bdda7..e211d7315a74 100644
--- a/oox/source/drawingml/graphicshapecontext.cxx
+++ b/oox/source/drawingml/graphicshapecontext.cxx
@@ -275,6 +275,18 @@ ContextHandlerRef DiagramGraphicDataContext::onCreateContext( ::sal_Int32 aEleme
// No DrawingML fallback, need to warn the user at the end.
if (mpShapePtr->getExtDrawings().empty())
getFilter().setMissingExtDrawing();
+ else
+ {
+ for (const auto& rRelId : mpShapePtr->getExtDrawings())
+ {
+ // An invalid fallback reference is as bad as a missing one.
+ if (getFragmentPathFromRelId(rRelId).isEmpty())
+ {
+ getFilter().setMissingExtDrawing();
+ break;
+ }
+ }
+ }
break;
}
diff --git a/oox/source/ppt/extdrawingfragmenthandler.cxx b/oox/source/ppt/extdrawingfragmenthandler.cxx
index 72b33ff83c9e..7d1a3cf6a4a7 100644
--- a/oox/source/ppt/extdrawingfragmenthandler.cxx
+++ b/oox/source/ppt/extdrawingfragmenthandler.cxx
@@ -11,6 +11,7 @@
#include <oox/token/namespaces.hxx>
#include <oox/token/tokens.hxx>
+#include <oox/core/xmlfilterbase.hxx>
using namespace ::oox::core;
using namespace ::com::sun::star::xml::sax;
@@ -35,7 +36,9 @@ ExtDrawingFragmentHandler::ExtDrawingFragmentHandler( XmlFilterBase& rFilter,
ExtDrawingFragmentHandler::~ExtDrawingFragmentHandler( ) throw ()
{
-
+ // Empty DrawingML fallback, need to warn the user at the end.
+ if (mpShapePtr && mpShapePtr->getChildren().empty())
+ getFilter().setMissingExtDrawing();
}
ContextHandlerRef