gdiplus: GdipDrawArc should return InvalidParameter for non-positive values of height and width.

This commit is contained in:
Royal Chan 2008-02-25 21:06:27 -08:00 committed by Alexandre Julliard
parent fc31303780
commit ea92872af0
2 changed files with 46 additions and 1 deletions

View File

@ -915,7 +915,7 @@ GpStatus WINGDIPAPI GdipDrawArc(GpGraphics *graphics, GpPen *pen, REAL x,
GpPointF points[MAX_ARC_PTS];
GpStatus retval;
if(!graphics || !pen)
if(!graphics || !pen || width <= 0 || height <= 0)
return InvalidParameter;
num_pts = arc2polybezier(points, x, y, width, height, startAngle, sweepAngle);

View File

@ -220,6 +220,50 @@ static void test_save_restore(void)
ReleaseDC(0, hdc);
}
static void test_GdipDrawArc(void)
{
GpStatus status;
GpGraphics *graphics = NULL;
GpPen *pen = NULL;
HDC hdc = GetDC(0);
/* make a graphics object and pen object */
status = GdipCreateFromHDC(hdc, &graphics);
expect(Ok, status);
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 = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
expect(Ok, status);
ok(pen != NULL, "Expected pen to be initialized\n");
/* InvalidParameter cases: null graphics, null pen, non-positive width, non-positive height */
status = GdipDrawArc(NULL, NULL, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
expect(InvalidParameter, status);
status = GdipDrawArc(graphics, NULL, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0);
expect(InvalidParameter, status);
status = GdipDrawArc(NULL, pen, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0);
expect(InvalidParameter, status);
status = GdipDrawArc(graphics, pen, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0);
expect(InvalidParameter, status);
status = GdipDrawArc(graphics, pen, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0);
expect(InvalidParameter, status);
/* successful case */
status = GdipDrawArc(graphics, pen, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0);
expect(Ok, status);
GdipDeletePen(pen);
ReleaseDC(0, hdc);
}
static void test_GdipDrawArcI(void)
{
GpStatus status;
@ -317,6 +361,7 @@ START_TEST(graphics)
test_constructor_destructor();
test_save_restore();
test_GdipDrawBezierI();
test_GdipDrawArc();
test_GdipDrawArcI();
GdiplusShutdown(gdiplusToken);