From b12ab05f101c4fc64219e811f92743ce8efc996e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Wed, 31 Aug 2016 22:01:27 +0100 Subject: [PATCH] ddraw/tests: Extend TransformVertices invalid data tests. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Dösinger Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/ddraw/tests/ddraw1.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index f04ccd3a853..e8194b391b8 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -9440,9 +9440,61 @@ static void test_transform_vertices(void) ok(offscreen == D3DCLIP_RIGHT, "Offscreen is %x.\n", offscreen); /* Invalid flags. */ + offscreen = 0xdeadbeef; hr = IDirect3DViewport_TransformVertices(viewport, ARRAY_SIZE(position_tests), &transformdata, 0, &offscreen); ok(hr == DDERR_INVALIDPARAMS, "TransformVertices returned %#x.\n", hr); + ok(offscreen == 0xdeadbeef, "Offscreen is %x.\n", offscreen); + + /* NULL transform data. */ + hr = IDirect3DViewport_TransformVertices(viewport, 1, + NULL, D3DTRANSFORM_UNCLIPPED, &offscreen); + ok(hr == DDERR_INVALIDPARAMS, "TransformVertices returned %#x.\n", hr); + ok(offscreen == 0xdeadbeef, "Offscreen is %x.\n", offscreen); + hr = IDirect3DViewport_TransformVertices(viewport, 0, + NULL, D3DTRANSFORM_UNCLIPPED, &offscreen); + ok(hr == DDERR_INVALIDPARAMS, "TransformVertices returned %#x.\n", hr); + ok(offscreen == 0xdeadbeef, "Offscreen is %x.\n", offscreen); + + /* NULL transform data and NULL dwOffscreen. + * + * Valid transform data + NULL dwOffscreen -> crash. */ + hr = IDirect3DViewport_TransformVertices(viewport, 1, + NULL, D3DTRANSFORM_UNCLIPPED, NULL); + ok(hr == DDERR_INVALIDPARAMS, "TransformVertices returned %#x.\n", hr); + + /* No vertices. */ + hr = IDirect3DViewport_TransformVertices(viewport, 0, + &transformdata, D3DTRANSFORM_UNCLIPPED, &offscreen); + ok(SUCCEEDED(hr), "Failed to transform vertices, hr %#x.\n", hr); + ok(!offscreen, "Offscreen is %x.\n", offscreen); + hr = IDirect3DViewport_TransformVertices(viewport, 0, + &transformdata, D3DTRANSFORM_CLIPPED, &offscreen); + ok(SUCCEEDED(hr), "Failed to transform vertices, hr %#x.\n", hr); + ok(offscreen == ~0U, "Offscreen is %x.\n", offscreen); + + /* Invalid sizes. */ + offscreen = 0xdeadbeef; + transformdata.dwSize = sizeof(transformdata) - 1; + hr = IDirect3DViewport_TransformVertices(viewport, 1, + &transformdata, D3DTRANSFORM_UNCLIPPED, &offscreen); + ok(hr == DDERR_INVALIDPARAMS, "TransformVertices returned %#x.\n", hr); + ok(offscreen == 0xdeadbeef, "Offscreen is %x.\n", offscreen); + transformdata.dwSize = sizeof(transformdata) + 1; + hr = IDirect3DViewport_TransformVertices(viewport, 1, + &transformdata, D3DTRANSFORM_UNCLIPPED, &offscreen); + ok(hr == DDERR_INVALIDPARAMS, "TransformVertices returned %#x.\n", hr); + ok(offscreen == 0xdeadbeef, "Offscreen is %x.\n", offscreen); + + /* NULL lpIn or lpOut -> crash, except when transforming 0 vertices. */ + transformdata.dwSize = sizeof(transformdata); + transformdata.lpIn = NULL; + transformdata.lpOut = NULL; + offscreen = 0xdeadbeef; + hr = IDirect3DViewport_TransformVertices(viewport, 0, + &transformdata, D3DTRANSFORM_CLIPPED, &offscreen); + ok(SUCCEEDED(hr), "Failed to transform vertices, hr %#x.\n", hr); + ok(offscreen == ~0U, "Offscreen is %x.\n", offscreen); destroy_viewport(device, viewport); refcount = IDirect3DDevice_Release(device); -- 2.11.4.GIT