[Libreoffice-commits] core.git: svx/source

Stephan Bergmann sbergman at redhat.com
Wed Mar 29 08:11:41 UTC 2017


 svx/source/unodraw/unoshap2.cxx |   22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

New commits:
commit 26909d9de4c6e7165fc8f5d938ee6ef55b87cc5c
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Mar 29 09:15:48 2017 +0200

    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 at libreoffice.org>
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

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:


More information about the Libreoffice-commits mailing list