gdiplus: GdipDrawArc should return InvalidParameter for non-positive values of height and width.
This commit is contained in:
parent
fc31303780
commit
ea92872af0
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue