[PATCH 2/4] dmsynth: Add error handling to the synth GetPortCaps method

Michael Stefaniuc mstefani at winehq.org
Tue Jan 25 16:11:24 CST 2022


Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
 dlls/dmsynth/synth.c         |  3 +++
 dlls/dmsynth/tests/dmsynth.c | 11 +++++++++++
 2 files changed, 14 insertions(+)

diff --git a/dlls/dmsynth/synth.c b/dlls/dmsynth/synth.c
index 51b33e8df8d..f05f769761e 100644
--- a/dlls/dmsynth/synth.c
+++ b/dlls/dmsynth/synth.c
@@ -295,6 +295,9 @@ static HRESULT WINAPI IDirectMusicSynth8Impl_GetPortCaps(IDirectMusicSynth8 *ifa
 
     TRACE("(%p)->(%p)\n", This, caps);
 
+    if (!caps || caps->dwSize < sizeof(*caps))
+        return E_INVALIDARG;
+
     *caps = This->caps;
 
     return S_OK;
diff --git a/dlls/dmsynth/tests/dmsynth.c b/dlls/dmsynth/tests/dmsynth.c
index e27d8abdb26..59ced1f0f21 100644
--- a/dlls/dmsynth/tests/dmsynth.c
+++ b/dlls/dmsynth/tests/dmsynth.c
@@ -64,6 +64,7 @@ static void test_dmsynth(void)
     KSPROPERTY property;
     ULONG value;
     ULONG bytes;
+    DMUS_PORTCAPS caps;
 
     hr = CoCreateInstance(&CLSID_DirectMusicSynth, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicSynth, (LPVOID*)&dmsynth);
     ok(hr == S_OK, "CoCreateInstance returned: %x\n", hr);
@@ -146,6 +147,16 @@ static void test_dmsynth(void)
     ref_clock_synth = get_refcount(clock_synth);
     ok(ref_clock_synth > ref_clock_sink + 1, "Latency clock refcount didn't increase\n");
 
+    /* GetPortCaps */
+    hr = IDirectMusicSynth_GetPortCaps(dmsynth, NULL);
+    ok(hr == E_INVALIDARG, "GetPortCaps failed: %#x\n", hr);
+    memset(&caps, 0, sizeof(caps));
+    hr = IDirectMusicSynth_GetPortCaps(dmsynth, &caps);
+    ok(hr == E_INVALIDARG, "GetPortCaps failed: %#x\n", hr);
+    caps.dwSize = sizeof(caps) + 1;
+    hr = IDirectMusicSynth_GetPortCaps(dmsynth, &caps);
+    ok(hr == S_OK, "GetPortCaps failed: %#x\n", hr);
+
     if (control_synth)
         IDirectMusicSynth_Release(control_synth);
     if (control_sink)
-- 
2.34.1




More information about the wine-devel mailing list