[PATCH 1/5] d3d8: Don't validate 2D texture lock coordinates.
Stefan Dösinger
stefandoesinger at gmx.at
Mon Jan 18 16:20:05 CST 2016
Signed-off-by: Stefan Dösinger <stefandoesinger at gmx.at>
---
dlls/d3d8/surface.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d8/surface.c b/dlls/d3d8/surface.c
index 679f094..ec263b1 100644
--- a/dlls/d3d8/surface.c
+++ b/dlls/d3d8/surface.c
@@ -204,26 +204,36 @@ static HRESULT WINAPI d3d8_surface_LockRect(IDirect3DSurface8 *iface,
struct wined3d_box box;
struct wined3d_map_desc map_desc;
HRESULT hr;
+ D3DRESOURCETYPE type;
TRACE("iface %p, locked_rect %p, rect %s, flags %#x.\n",
iface, locked_rect, wine_dbgstr_rect(rect), flags);
wined3d_mutex_lock();
+
+ if (surface->texture)
+ type = IDirect3DBaseTexture8_GetType(&surface->texture->IDirect3DBaseTexture8_iface);
+ else
+ type = D3DRTYPE_SURFACE;
+
if (rect)
{
D3DSURFACE_DESC desc;
IDirect3DSurface8_GetDesc(iface, &desc);
- if ((rect->left < 0)
+ if (type != D3DRTYPE_TEXTURE
+ && ((rect->left < 0)
|| (rect->top < 0)
|| (rect->left >= rect->right)
|| (rect->top >= rect->bottom)
|| (rect->right > desc.Width)
- || (rect->bottom > desc.Height))
+ || (rect->bottom > desc.Height)))
{
WARN("Trying to lock an invalid rectangle, returning D3DERR_INVALIDCALL\n");
wined3d_mutex_unlock();
+ locked_rect->Pitch = 0;
+ locked_rect->pBits = NULL;
return D3DERR_INVALIDCALL;
}
box.left = rect->left;
@@ -243,7 +253,7 @@ static HRESULT WINAPI d3d8_surface_LockRect(IDirect3DSurface8 *iface,
locked_rect->Pitch = map_desc.row_pitch;
locked_rect->pBits = map_desc.data;
}
- else
+ else if (type != D3DRTYPE_TEXTURE)
{
locked_rect->Pitch = 0;
locked_rect->pBits = NULL;
--
2.4.10
More information about the wine-patches
mailing list