Signed-off-by: Sven Baars sven.wine@gmail.com --- dlls/gdi32/region.c | 2 +- dlls/gdi32/tests/clipping.c | 37 ++++++------------------------------- 2 files changed, 7 insertions(+), 32 deletions(-)
diff --git a/dlls/gdi32/region.c b/dlls/gdi32/region.c index 93238b5a84..5b786ec838 100644 --- a/dlls/gdi32/region.c +++ b/dlls/gdi32/region.c @@ -953,7 +953,7 @@ HRGN WINAPI ExtCreateRegion( const XFORM* lpXform, DWORD dwCount, const RGNDATA* WINEREGION *obj; const RECT *pCurRect, *pEndRect;
- if (!rgndata) + if (!rgndata || dwCount < sizeof(RGNDATAHEADER)) { SetLastError( ERROR_INVALID_PARAMETER ); return 0; diff --git a/dlls/gdi32/tests/clipping.c b/dlls/gdi32/tests/clipping.c index d04ef77ca3..1160d66479 100644 --- a/dlls/gdi32/tests/clipping.c +++ b/dlls/gdi32/tests/clipping.c @@ -182,13 +182,10 @@ static void test_ExtCreateRegion(void) HRGN hrgn; XFORM xform;
- if (0) /* crashes under Win9x */ - { - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, 0, NULL); - ok(!hrgn, "ExtCreateRegion should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - } + SetLastError(0xdeadbeef); + hrgn = ExtCreateRegion(NULL, 0, NULL); + ok(!hrgn, "ExtCreateRegion should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
rgn.data.rdh.dwSize = 0; rgn.data.rdh.iType = 0; @@ -223,9 +220,9 @@ static void test_ExtCreateRegion(void) /* Cannot be smaller than sizeof(RGNDATAHEADER) */ SetLastError(0xdeadbeef); hrgn = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) - 1, &rgn.data); - todo_wine ok(!hrgn, "ExtCreateRegion should fail\n"); - ok(GetLastError() == 0xdeadbeef, "0xdeadbeef, got %u\n", GetLastError()); + ok(GetLastError() == ERROR_INVALID_PARAMETER || + broken(GetLastError() == 0xdeadbeef), "0xdeadbeef, got %u\n", GetLastError());
SetLastError(0xdeadbeef); hrgn = ExtCreateRegion(NULL, sizeof(rgn), &rgn.data); @@ -237,32 +234,12 @@ static void test_ExtCreateRegion(void) SetRectEmpty(&rgn.data.rdh.rcBound); memcpy(rgn.data.Buffer, &rc, sizeof(rc));
- /* With a single rect this seems to work... */ - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + sizeof(RECT) - 1, &rgn.data); - ok(hrgn != 0, "ExtCreateRegion error %u\n", GetLastError()); - verify_region(hrgn, &rc); - DeleteObject(hrgn); - SetLastError(0xdeadbeef); hrgn = ExtCreateRegion(NULL, sizeof(rgn), &rgn.data); ok(hrgn != 0, "ExtCreateRegion error %u\n", GetLastError()); verify_region(hrgn, &rc); DeleteObject(hrgn);
- rgn.data.rdh.dwSize = sizeof(rgn.data.rdh) + 1; - - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, 1, &rgn.data); - ok(hrgn != 0 || - broken(GetLastError() == 0xdeadbeef), /* NT4 */ - "ExtCreateRegion error %u\n", GetLastError()); - if(hrgn) - { - verify_region(hrgn, &rc); - DeleteObject(hrgn); - } - xform.eM11 = 0.5; /* 50% width */ xform.eM12 = 0.0; xform.eM21 = 0.0; @@ -270,8 +247,6 @@ static void test_ExtCreateRegion(void) xform.eDx = 20.0; xform.eDy = 40.0;
- rgn.data.rdh.dwSize = sizeof(rgn.data.rdh); - SetLastError(0xdeadbeef); hrgn = ExtCreateRegion(&xform, sizeof(rgn), &rgn.data); ok(hrgn != 0, "ExtCreateRegion error %u/%x\n", GetLastError(), GetLastError());