From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com --- dlls/xactengine3_7/tests/xact3.c | 18 ++++++++++++++++++ dlls/xactengine3_7/xact_dll.c | 8 ++++++++ 2 files changed, 26 insertions(+)
diff --git a/dlls/xactengine3_7/tests/xact3.c b/dlls/xactengine3_7/tests/xact3.c index 6b66af59ff0..3d268fcc33c 100644 --- a/dlls/xactengine3_7/tests/xact3.c +++ b/dlls/xactengine3_7/tests/xact3.c @@ -208,6 +208,24 @@ static void test_notifications(void) hr = IXACT3Engine_Initialize(engine, ¶ms); ok(hr == S_OK, "Cannot initialize engine, hr %#lx\n", hr);
+ notification_desc.type = 0; + notification_desc.flags = 0; + notification_desc.pvContext = &prepared_data; + hr = IXACT3Engine_RegisterNotification(engine, ¬ification_desc); + ok(hr == E_INVALIDARG, "got hr %#lx\n", hr); + + hr = IXACT3Engine_RegisterNotification(engine, ¬ification_desc); + ok(hr == E_INVALIDARG, "got hr %#lx\n", hr); + + notification_desc.type = 0; + notification_desc.flags = 0; + notification_desc.pvContext = &prepared_data; + hr = IXACT3Engine_RegisterNotification(engine, ¬ification_desc); + ok(hr == E_INVALIDARG, "got hr %#lx\n", hr); + + hr = IXACT3Engine_RegisterNotification(engine, ¬ification_desc); + ok(hr == E_INVALIDARG, "got hr %#lx\n", hr); + prepared_data.type = XACTNOTIFICATIONTYPE_WAVEBANKPREPARED; prepared_data.thread_id = GetCurrentThreadId(); notification_desc.type = XACTNOTIFICATIONTYPE_WAVEBANKPREPARED; diff --git a/dlls/xactengine3_7/xact_dll.c b/dlls/xactengine3_7/xact_dll.c index fa54409560e..07c58d76a5a 100644 --- a/dlls/xactengine3_7/xact_dll.c +++ b/dlls/xactengine3_7/xact_dll.c @@ -1517,6 +1517,10 @@ static HRESULT WINAPI IXACT3EngineImpl_RegisterNotification(IXACT3Engine *iface,
TRACE("(%p)->(%p)\n", This, pNotificationDesc);
+ if (pNotificationDesc->type < XACTNOTIFICATIONTYPE_CUEPREPARED || + pNotificationDesc->type > XACTNOTIFICATIONTYPE_WAVEBANKSTREAMING_INVALIDCONTENT) + return E_INVALIDARG; + unwrap_notificationdesc(&fdesc, pNotificationDesc); This->contexts[pNotificationDesc->type] = pNotificationDesc->pvContext; fdesc.pvContext = This; @@ -1531,6 +1535,10 @@ static HRESULT WINAPI IXACT3EngineImpl_UnRegisterNotification(IXACT3Engine *ifac
TRACE("(%p)->(%p)\n", This, pNotificationDesc);
+ if (pNotificationDesc->type < XACTNOTIFICATIONTYPE_CUEPREPARED || + pNotificationDesc->type > XACTNOTIFICATIONTYPE_WAVEBANKSTREAMING_INVALIDCONTENT) + return E_INVALIDARG; + unwrap_notificationdesc(&fdesc, pNotificationDesc); fdesc.pvContext = This; return FACTAudioEngine_UnRegisterNotification(This->fact_engine, &fdesc);