From: Matteo Bruni mbruni@codeweavers.com
--- dlls/dsound/propset.c | 6 ++++++ dlls/dsound/tests/propset.c | 11 ++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c index 28df7887f65..4283618196e 100644 --- a/dlls/dsound/propset.c +++ b/dlls/dsound/propset.c @@ -202,6 +202,9 @@ static HRESULT DSPROPERTY_DescriptionW( TRACE("pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", pPropData,cbPropData,pcbReturned);
+ if (cbPropData < sizeof(*ppd)) + return E_INVALIDARG; + TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId)); if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) { /* default device of type specified by ppd->DataFlow */ @@ -316,6 +319,9 @@ static HRESULT DSPROPERTY_EnumerateW( return E_PROP_ID_UNSUPPORTED; }
+ if (cbPropData < sizeof(*ppd)) + return E_INVALIDARG; + hr = enumerate_mmdevices(eRender, DSOUND_renderer_guids, enum_callback, ppd);
diff --git a/dlls/dsound/tests/propset.c b/dlls/dsound/tests/propset.c index 88c5132bc6c..bd36973d2ef 100644 --- a/dlls/dsound/tests/propset.c +++ b/dlls/dsound/tests/propset.c @@ -429,9 +429,14 @@ static void propset_private_tests(void) data.Context = 0;
rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, - DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE, - NULL, 0, &data, sizeof(data), &bytes); - ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); + DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE, + NULL, 0, &data, 1, &bytes); + ok(rc == E_INVALIDARG, "Unexpected rc 0x%lx\n", rc); + + rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, + DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE, + NULL, 0, &data, sizeof(data), &bytes); + ok(rc == DS_OK, "Couldn't enumerate: 0x%lx\n", rc); }
/* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 */