Nikolay Sivov : dxva2: Fix valid handle range test.

Alexandre Julliard julliard at winehq.org
Wed Oct 21 15:15:13 CDT 2020


Module: wine
Branch: master
Commit: 2b04143e6dfb4969b28b76a4cdd00ee85ebb9be2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2b04143e6dfb4969b28b76a4cdd00ee85ebb9be2

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Oct 21 09:46:28 2020 +0300

dxva2: Fix valid handle range test.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dxva2/main.c        |  2 +-
 dlls/dxva2/tests/dxva2.c | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/dlls/dxva2/main.c b/dlls/dxva2/main.c
index 6262531c7d1..83c4723a7dc 100644
--- a/dlls/dxva2/main.c
+++ b/dlls/dxva2/main.c
@@ -562,7 +562,7 @@ static HRESULT WINAPI device_manager_OpenDeviceHandle(IDirect3DDeviceManager9 *i
 
 static HRESULT device_manager_get_handle_index(struct device_manager *manager, HANDLE hdevice, size_t *idx)
 {
-    if (hdevice > ULongToHandle(manager->count))
+    if (!hdevice || hdevice > ULongToHandle(manager->count))
         return E_HANDLE;
     *idx = (ULONG_PTR)hdevice - 1;
     return S_OK;
diff --git a/dlls/dxva2/tests/dxva2.c b/dlls/dxva2/tests/dxva2.c
index f617bf74079..a49635e7596 100644
--- a/dlls/dxva2/tests/dxva2.c
+++ b/dlls/dxva2/tests/dxva2.c
@@ -115,6 +115,9 @@ static void test_device_manager(void)
     hr = IDirect3DDeviceManager9_LockDevice(manager, 0, &device2, FALSE);
     ok(hr == DXVA2_E_NOT_INITIALIZED, "Unexpected hr %#x.\n", hr);
 
+    hr = IDirect3DDeviceManager9_CloseDeviceHandle(manager, 0);
+    ok(hr == E_HANDLE, "Unexpected hr %#x.\n", hr);
+
     /* Invalid token. */
     hr = IDirect3DDeviceManager9_ResetDevice(manager, device, token + 1);
     ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
@@ -123,9 +126,13 @@ static void test_device_manager(void)
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
     refcount = get_refcount(device);
 
+    hr = IDirect3DDeviceManager9_CloseDeviceHandle(manager, 0);
+    ok(hr == E_HANDLE, "Unexpected hr %#x.\n", hr);
+
     handle1 = NULL;
     hr = IDirect3DDeviceManager9_OpenDeviceHandle(manager, &handle1);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(!!handle1, "Unexpected handle value.\n");
 
     refcount2 = get_refcount(device);
     ok(refcount2 == refcount, "Unexpected refcount %d.\n", refcount);
@@ -152,6 +159,9 @@ static void test_device_manager(void)
     hr = IDirect3DDeviceManager9_TestDevice(manager, handle1);
     ok(hr == E_HANDLE, "Unexpected hr %#x.\n", hr);
 
+    hr = IDirect3DDeviceManager9_TestDevice(manager, 0);
+    ok(hr == E_HANDLE, "Unexpected hr %#x.\n", hr);
+
     handle = NULL;
     hr = IDirect3DDeviceManager9_OpenDeviceHandle(manager, &handle);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);




More information about the wine-cvs mailing list