Jeff Smith : gdiplus: Clear new multi-point paths that end with Start.

Alexandre Julliard julliard at winehq.org
Tue Apr 14 16:15:26 CDT 2020


Module: wine
Branch: master
Commit: efd5f670bdac46c788efe566d4e28c3012c8874a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=efd5f670bdac46c788efe566d4e28c3012c8874a

Author: Jeff Smith <whydoubt at gmail.com>
Date:   Mon Apr 13 22:50:51 2020 -0500

gdiplus: Clear new multi-point paths that end with Start.

Signed-off-by: Jeff Smith <whydoubt at gmail.com>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdiplus/graphicspath.c       |  3 +++
 dlls/gdiplus/tests/graphicspath.c | 13 ++++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c
index df6a32d22d..2b191dd30d 100644
--- a/dlls/gdiplus/graphicspath.c
+++ b/dlls/gdiplus/graphicspath.c
@@ -1228,6 +1228,9 @@ GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF* points,
     *path = heap_alloc_zero(sizeof(GpPath));
     if(!*path)  return OutOfMemory;
 
+    if(count > 1 && (types[count-1] & PathPointTypePathTypeMask) == PathPointTypeStart)
+        count = 0;
+
     for(i = 1; i < count; i++) {
         if((types[i] & PathPointTypePathTypeMask) == PathPointTypeBezier) {
             if(i+2 < count &&
diff --git a/dlls/gdiplus/tests/graphicspath.c b/dlls/gdiplus/tests/graphicspath.c
index 1b3a9a161f..0c5297249a 100644
--- a/dlls/gdiplus/tests/graphicspath.c
+++ b/dlls/gdiplus/tests/graphicspath.c
@@ -181,8 +181,8 @@ static void test_createpath2(void)
     GpPathData data;
     INT i, count, expect_count;
 
-    PointF test_line_points[] = {{1.0,1.0}, {2.0,1.0}};
-    BYTE test_line_types[] = {PathPointTypeStart, PathPointTypeLine};
+    PointF test_line_points[] = {{1.0,1.0}, {2.0,1.0}, {2.0,2.0}};
+    BYTE test_line_types[] = {PathPointTypeStart, PathPointTypeLine, PathPointTypeStart};
 
     PointF test_bez_points[] = {{1.0,1.0}, {2.0,1.0}, {3.0,1.0}, {4.0,1.0},
             {5.0,1.0}, {6.0,1.0}, {7.0,1.0}};
@@ -235,8 +235,15 @@ static void test_createpath2(void)
     status = GdipCreatePath2(test_line_points, test_line_types, 2, FillModeAlternate, NULL);
     expect(InvalidParameter, status);
 
+    /* Multi-point paths should not end with Start */
+    status = GdipCreatePath2(test_line_points, test_line_types, 3, FillModeAlternate, &path);
+    expect(Ok, status);
+    status = GdipGetPointCount(path, &count);
+    expect(Ok, status);
+    expect(0, count);
+    GdipDeletePath(path);
+
     /* Zero-length line points do not get altered */
-    path = NULL;
     test_line_points[1].X = test_line_points[0].X;
     test_line_points[1].Y = test_line_points[0].Y;
     status = GdipCreatePath2(test_line_points, test_line_types, 2, FillModeAlternate, &path);




More information about the wine-cvs mailing list