[PATCH v3] gdiplus: Each pen dash array element must be greater than zero.

Jeff Smith whydoubt at gmail.com
Sat Feb 15 15:51:37 CST 2020


Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
v3: Add control case to validate dash array before testing invalid cases.
 
 dlls/gdiplus/pen.c       | 5 +----
 dlls/gdiplus/tests/pen.c | 7 +++++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/dlls/gdiplus/pen.c b/dlls/gdiplus/pen.c
index 8bcb91819a..156f90a19d 100644
--- a/dlls/gdiplus/pen.c
+++ b/dlls/gdiplus/pen.c
@@ -598,13 +598,10 @@ GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash,
 
     for(i = 0; i < count; i++){
         sum += dash[i];
-        if(dash[i] < 0.0)
+        if(dash[i] <= 0.0)
             return InvalidParameter;
     }
 
-    if(sum == 0.0 && count)
-        return InvalidParameter;
-
     heap_free(pen->dashes);
     pen->dashes = NULL;
 
diff --git a/dlls/gdiplus/tests/pen.c b/dlls/gdiplus/tests/pen.c
index ceab92acff..28caf29acb 100644
--- a/dlls/gdiplus/tests/pen.c
+++ b/dlls/gdiplus/tests/pen.c
@@ -175,7 +175,7 @@ static void test_dasharray(void)
     dashes[4] = 14.0;
     dashes[5] = -100.0;
     dashes[6] = -100.0;
-    dashes[7] = dashes[8] = dashes[9] = dashes[10] = dashes[11] = 0.0;
+    dashes[7] = dashes[8] = dashes[9] = dashes[10] = dashes[11] = 1.0;
 
     /* setting the array sets the type to custom */
     GdipGetPenDashStyle(pen, &style);
@@ -218,10 +218,13 @@ static void test_dasharray(void)
 
     /* Some invalid array values. */
     status = GdipSetPenDashArray(pen, &dashes[7], 5);
-    expect(InvalidParameter, status);
+    expect(Ok, status);
     dashes[9] = -1.0;
     status = GdipSetPenDashArray(pen, &dashes[7], 5);
     expect(InvalidParameter, status);
+    dashes[9] = 0.0;
+    status = GdipSetPenDashArray(pen, &dashes[7], 5);
+    expect(InvalidParameter, status);
 
     /* Try to set with count = 0. */
     GdipSetPenDashStyle(pen, DashStyleDot);
-- 
2.23.0




More information about the wine-devel mailing list