Module: wine Branch: refs/heads/master Commit: 3cc9e40c3bae7571574565a719cded877ccef29b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=3cc9e40c3bae7571574565a7...
Author: Ivan Leo Puoti ivanleo@gmail.com Date: Wed Dec 21 21:11:54 2005 +0100
ddraw: Fix DirectDrawSurface::QueryInterface crash.
---
dlls/ddraw/surface_main.c | 3 +++ dlls/ddraw/tests/dsurface.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/dlls/ddraw/surface_main.c b/dlls/ddraw/surface_main.c index fd10394..ba11359 100644 --- a/dlls/ddraw/surface_main.c +++ b/dlls/ddraw/surface_main.c @@ -160,6 +160,9 @@ Main_DirectDrawSurface_QueryInterface(LP
*ppObj = NULL;
+ if(!riid) + return DDERR_INVALIDPARAMS; + if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IDirectDrawSurface7, riid) || IsEqualGUID(&IID_IDirectDrawSurface4, riid)) diff --git a/dlls/ddraw/tests/dsurface.c b/dlls/ddraw/tests/dsurface.c index 10faf02..e1e0c93 100644 --- a/dlls/ddraw/tests/dsurface.c +++ b/dlls/ddraw/tests/dsurface.c @@ -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(); }