Paul Gofman : d3d11: Avoid crash in _CopySubresourceRegion[1]() on NULL resources.

Alexandre Julliard julliard at winehq.org
Tue Mar 23 15:07:44 CDT 2021


Module: wine
Branch: oldstable
Commit: 12ce2169171b3075f5778a3f69817473c27fa8d3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=12ce2169171b3075f5778a3f69817473c27fa8d3

Author: Paul Gofman <pgofman at codeweavers.com>
Date:   Wed Sep 16 15:19:23 2020 +0300

d3d11: Avoid crash in _CopySubresourceRegion[1]() on NULL resources.

Marvel's Avengers randomly hits this case.

Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 962e939a4da3f73814ce82e693585a8371ae4502)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/d3d11/device.c      | 9 +++++++++
 dlls/d3d11/tests/d3d11.c | 5 +++++
 2 files changed, 14 insertions(+)

diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 212881a9b71..a5161e25c83 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -1023,6 +1023,9 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_CopySubresourceRegion(ID3D
             iface, dst_resource, dst_subresource_idx, dst_x, dst_y, dst_z,
             src_resource, src_subresource_idx, src_box);
 
+    if (!dst_resource || !src_resource)
+        return;
+
     if (src_box)
         wined3d_box_set(&wined3d_src_box, src_box->left, src_box->top,
                 src_box->right, src_box->bottom, src_box->front, src_box->back);
@@ -2491,6 +2494,9 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_CopySubresourceRegion1(ID3
             iface, dst_resource, dst_subresource_idx, dst_x, dst_y, dst_z,
             src_resource, src_subresource_idx, src_box, flags);
 
+    if (!dst_resource || !src_resource)
+        return;
+
     if (src_box)
         wined3d_box_set(&wined3d_src_box, src_box->left, src_box->top,
                 src_box->right, src_box->bottom, src_box->front, src_box->back);
@@ -4538,6 +4544,9 @@ static void STDMETHODCALLTYPE d3d10_device_CopySubresourceRegion(ID3D10Device1 *
             iface, dst_resource, dst_subresource_idx, dst_x, dst_y, dst_z,
             src_resource, src_subresource_idx, src_box);
 
+    if (!dst_resource || !src_resource)
+        return;
+
     if (src_box)
         wined3d_box_set(&wined3d_src_box, src_box->left, src_box->top,
                 src_box->right, src_box->bottom, src_box->front, src_box->back);
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index f378ae52ecc..d665415b6e3 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -12661,6 +12661,11 @@ static void test_copy_subresource_region(void)
 
     ID3D11DeviceContext_ClearRenderTargetView(context, test_context.backbuffer_rtv, red);
 
+    ID3D11DeviceContext_CopySubresourceRegion(context, (ID3D11Resource *)dst_texture, 0,
+            1, 1, 0, NULL, 0, &box);
+    ID3D11DeviceContext_CopySubresourceRegion(context, NULL, 0,
+            1, 1, 0, (ID3D11Resource *)src_texture, 0, &box);
+
     set_box(&box, 0, 0, 0, 2, 2, 1);
     ID3D11DeviceContext_CopySubresourceRegion(context, (ID3D11Resource *)dst_texture, 0,
             1, 1, 0, (ID3D11Resource *)src_texture, 0, &box);




More information about the wine-cvs mailing list