gdiplus: Improve GdipFillRectangles parameter validation.

This commit is contained in:
Vincent Povirk 2014-02-19 15:16:48 -06:00 committed by Alexandre Julliard
parent ed11dc0ba3
commit 78459aea0d
2 changed files with 48 additions and 1 deletions

View File

@ -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)

View File

@ -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 );