From 78459aea0dcce1e5b7dd9d30b1e516646f33722d Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Wed, 19 Feb 2014 15:16:48 -0600 Subject: [PATCH] gdiplus: Improve GdipFillRectangles parameter validation. --- dlls/gdiplus/graphics.c | 2 +- dlls/gdiplus/tests/graphics.c | 47 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 2608bf4c3c9..1f01b8258cc 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -3747,7 +3747,7 @@ GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics *graphics, GpBrush *brush, GDI TRACE("(%p, %p, %p, %d)\n", graphics, brush, rects, count); - if(!rects) + if(!graphics || !brush || !rects || count <= 0) return InvalidParameter; if (graphics->image && graphics->image->type == ImageTypeMetafile) diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 4d740815ca4..9fb13479ea1 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -5493,6 +5493,52 @@ static void test_clipping_2(void) DeleteDC(hdc); } + +static void test_GdipFillRectangles(void) +{ + GpStatus status; + GpGraphics *graphics = NULL; + GpBrush *brush = NULL; + HDC hdc = GetDC( hwnd ); + GpRectF rects[2] = {{0,0,10,10}, {10,10,10,10}}; + + ok(hdc != NULL, "Expected HDC to be initialized\n"); + + status = GdipCreateFromHDC(hdc, &graphics); + expect(Ok, status); + ok(graphics != NULL, "Expected graphics to be initialized\n"); + + status = GdipCreateSolidFill((ARGB)0xffff00ff, (GpSolidFill**)&brush); + expect(Ok, status); + ok(brush != NULL, "Expected brush to be initialized\n"); + + status = GdipFillRectangles(NULL, brush, rects, 2); + expect(InvalidParameter, status); + + status = GdipFillRectangles(graphics, NULL, rects, 2); + expect(InvalidParameter, status); + + status = GdipFillRectangles(graphics, brush, NULL, 2); + expect(InvalidParameter, status); + + status = GdipFillRectangles(graphics, brush, rects, 0); + expect(InvalidParameter, status); + + status = GdipFillRectangles(graphics, brush, rects, -1); + expect(InvalidParameter, status); + + status = GdipFillRectangles(graphics, brush, rects, 1); + expect(Ok, status); + + status = GdipFillRectangles(graphics, brush, rects, 2); + expect(Ok, status); + + GdipDeleteBrush(brush); + GdipDeleteGraphics(graphics); + + ReleaseDC(hwnd, hdc); +} + START_TEST(graphics) { struct GdiplusStartupInput gdiplusStartupInput; @@ -5563,6 +5609,7 @@ START_TEST(graphics) test_getdc_scaled(); test_alpha_hdc(); test_bitmapfromgraphics(); + test_GdipFillRectangles(); GdiplusShutdown(gdiplusToken); DestroyWindow( hwnd ); -- 2.11.4.GIT