ddraw: Fix DirectDrawSurface::QueryInterface crash.

This commit is contained in:
Ivan Leo Puoti 2005-12-21 21:11:54 +01:00 committed by Alexandre Julliard
parent 8827bcfd74
commit 3cc9e40c3b
2 changed files with 31 additions and 0 deletions

View File

@ -160,6 +160,9 @@ Main_DirectDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,
*ppObj = NULL;
if(!riid)
return DDERR_INVALIDPARAMS;
if (IsEqualGUID(&IID_IUnknown, riid)
|| IsEqualGUID(&IID_IDirectDrawSurface7, riid)
|| IsEqualGUID(&IID_IDirectDrawSurface4, riid))

View File

@ -3,6 +3,7 @@
*
* Copyright (C) 2005 Antoine Chavasse (a.chavasse@gmail.com)
* Copyright (C) 2005 Christian Costa
* Copyright 2005 Ivan Leo Puoti
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -220,11 +221,38 @@ static void SrcColorKey32BlitTest(void)
IDirectDrawSurface_Release(lpDst);
}
static void QueryInterface(void)
{
LPDIRECTDRAWSURFACE dsurface;
DDSURFACEDESC surface;
LPVOID object;
HRESULT ret;
/* Create a surface */
ZeroMemory(&surface, sizeof(surface));
surface.dwSize = sizeof(surface);
surface.dwFlags = DDSD_WIDTH | DDSD_HEIGHT;
surface.dwHeight = 10;
surface.dwWidth = 10;
ret = IDirectDraw_CreateSurface(lpDD, &surface, &dsurface, NULL);
if(ret != DD_OK)
{
ok(FALSE, "IDirectDraw::CreateSurface failed with error %lx\n", ret);
return;
}
/* Call IUnkown::QueryInterface */
ret = IDirectDrawSurface_QueryInterface(dsurface, 0, &object);
ok(ret == DDERR_INVALIDPARAMS, "IDirectDrawSurface::QueryInterface returned %lx\n", ret);
IDirectDrawSurface_Release(dsurface);
}
START_TEST(dsurface)
{
CreateDirectDraw();
MipMapCreationTest();
SrcColorKey32BlitTest();
QueryInterface();
ReleaseDirectDraw();
}