[PATCH 3/5] wined3d: Check box dimensions in volume_map.

Stefan Dösinger stefan at codeweavers.com
Wed Sep 18 05:24:57 CDT 2013


---
 dlls/wined3d/volume.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index fcab45b..2fa04c5 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -566,6 +566,28 @@ static BOOL volume_check_block_align(const struct wined3d_volume *volume,
     return TRUE;
 }
 
+static BOOL wined3d_volume_check_box_dimensions(const struct wined3d_volume *volume,
+        const struct wined3d_box *box)
+{
+    if (!box)
+        return TRUE;
+
+    if (box->left >= box->right)
+        return FALSE;
+    if (box->top >= box->bottom)
+        return FALSE;
+    if (box->front >= box->back)
+        return FALSE;
+    if (box->right > volume->resource.width)
+        return FALSE;
+    if (box->bottom > volume->resource.height)
+        return FALSE;
+    if (box->back > volume->resource.depth)
+        return FALSE;
+
+    return TRUE;
+}
+
 HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
         struct wined3d_map_desc *map_desc, const struct wined3d_box *box, DWORD flags)
 {
@@ -589,6 +611,11 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
         WARN("Volume is already mapped.\n");
         return WINED3DERR_INVALIDCALL;
     }
+    if (!wined3d_volume_check_box_dimensions(volume, box))
+    {
+        WARN("Map box is invalid.\n");
+        return WINED3DERR_INVALIDCALL;
+    }
     if ((format->flags & WINED3DFMT_FLAG_BLOCKS) && !volume_check_block_align(volume, box))
     {
         WARN("Map box is misaligned for %ux%u blocks.\n",
-- 
1.8.1.5




More information about the wine-patches mailing list