From: Elizabeth Figura <zfigura@codeweavers.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58963 --- dlls/ddrawex/ddraw.c | 6 ++++-- dlls/ddrawex/tests/ddrawex.c | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/dlls/ddrawex/ddraw.c b/dlls/ddrawex/ddraw.c index a03683b6c2f..081ebea6fa5 100644 --- a/dlls/ddrawex/ddraw.c +++ b/dlls/ddrawex/ddraw.c @@ -575,10 +575,12 @@ static HRESULT WINAPI ddrawex3_EnumDisplayModes(IDirectDraw3 *iface, DWORD flags TRACE("iface %p, flags %#lx, desc %p, ctx %p, cb %p.\n", iface, flags, desc, ctx, cb); - DDSD_to_DDSD2(desc, &ddsd2); + if (desc) + DDSD_to_DDSD2(desc, &ddsd2); cb_ctx.orig_cb = cb; cb_ctx.orig_ctx = ctx; - return ddrawex4_EnumDisplayModes(&ddrawex->IDirectDraw4_iface, flags, &ddsd2, &cb_ctx, enum_modes_cb2); + return ddrawex4_EnumDisplayModes(&ddrawex->IDirectDraw4_iface, flags, + desc ? &ddsd2 : NULL, &cb_ctx, enum_modes_cb2); } static HRESULT WINAPI ddrawex2_EnumDisplayModes(IDirectDraw2 *iface, DWORD flags, diff --git a/dlls/ddrawex/tests/ddrawex.c b/dlls/ddrawex/tests/ddrawex.c index 59268444ea2..5ad92778e99 100644 --- a/dlls/ddrawex/tests/ddrawex.c +++ b/dlls/ddrawex/tests/ddrawex.c @@ -99,6 +99,24 @@ static void RefCountTest(void) IDirectDraw4_Release(dd4); } +static HRESULT CALLBACK enum_display_modes_cb(DDSURFACEDESC *desc, void *ctx) +{ + return S_OK; +} + +static void test_enum_display_modes(void) +{ + IDirectDraw *ddraw = createDDraw(); + HRESULT hr; + ULONG ref; + + hr = IDirectDraw_EnumDisplayModes(ddraw, 0, NULL, NULL, &enum_display_modes_cb); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ref = IDirectDraw_Release(ddraw); + ok(!ref, "Got unexpected refcount %lu.\n", ref); +} + START_TEST(ddrawex) { IClassFactory *classfactory = NULL; @@ -121,6 +139,7 @@ START_TEST(ddrawex) ok(hr == S_OK, "Failed to create a IDirectDrawFactory\n"); RefCountTest(); + test_enum_display_modes(); if(factory) { ref = IDirectDrawFactory_Release(factory); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10074