summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-03-29 09:15:48 +0200
committerStephan Bergmann <sbergman@redhat.com>2017-03-29 08:11:20 +0000
commit26909d9de4c6e7165fc8f5d938ee6ef55b87cc5c (patch)
tree98ea955595fd8b46e4c64eabbe3504f2ab6d9872
parentd93b8268da982ad26db9e03156ce9b89f3410486 (diff)
tdf#106792: Fix "Geometry" property of changed-to-bezier SvxShapePolyPolygon
After "Convert to Curve" as described in the issue, the shape apparently is still an SvxShapePolyPolygon shape but with getShapeKind() of OBJ_PATHLINE instead of OBJ_PLIN (and same for OBJ_PATHFILL). That causes XMLShapeExport::ImpExportPolygonShape (xmloff/source/draw/shapeexport.cxx) to determine bBezier == true and thus expect the obtained "Geometry" property to be of type css::drawing::PolyPolygonBezierCoords, not merely css::drawing::PointSequenceSequence. Smells like this issue had always been present, and would have caused bad memory access when accessing the non-css::drawing::PolyPolygonBezierCoords object in XMLShapeExport::ImpExportPolygonShape, and only now throws an exception since 0d7c5823124696f80583ac2a5f0e28f329f6f786 "New o3tl::try/doGet to obtain value from Any". Change-Id: Ica31a114e5beac97bac2a1c509eb1a85f8354d5e Reviewed-on: https://gerrit.libreoffice.org/35825 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r--svx/source/unodraw/unoshap2.cxx22
1 files changed, 19 insertions, 3 deletions
diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx
index bf964ff653db..201b245b0017 100644
--- a/svx/source/unodraw/unoshap2.cxx
+++ b/svx/source/unodraw/unoshap2.cxx
@@ -1123,9 +1123,25 @@ bool SvxShapePolyPolygon::getPropertyValueImpl( const OUString& rName, const Sfx
if(mpObj.is())
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
- drawing::PointSequenceSequence aRetval(aNewPolyPolygon.count());
- B2DPolyPolygonToSvxPointSequenceSequence(aNewPolyPolygon, aRetval);
- rValue <<= aRetval;
+ switch (getShapeKind()) {
+ case OBJ_PATHLINE:
+ case OBJ_PATHFILL:
+ {
+ drawing::PolyPolygonBezierCoords aRetval;
+ basegfx::unotools::b2DPolyPolygonToPolyPolygonBezier(
+ aNewPolyPolygon, aRetval);
+ rValue <<= aRetval;
+ break;
+ }
+ default:
+ {
+ drawing::PointSequenceSequence aRetval(aNewPolyPolygon.count());
+ B2DPolyPolygonToSvxPointSequenceSequence(
+ aNewPolyPolygon, aRetval);
+ rValue <<= aRetval;
+ break;
+ }
+ }
break;
}
case OWN_ATTR_VALUE_POLYGON: