diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 0214a7f1e35..0006126bf5d 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -5943,6 +5943,15 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_ HeapFree(GetProcessHeap(), 0, texture); return DDERR_INVALIDPARAMS; } + + if ((desc->dwFlags & DDSD_LINEARSIZE) + && desc->u1.dwLinearSize < wined3d_calculate_format_pitch(ddraw->wined3d, WINED3DADAPTER_DEFAULT, + wined3d_desc.format, wined3d_desc.width) * ((desc->dwHeight + 3) / 4)) + { + WARN("Invalid linear size %u specified.\n", desc->u1.dwLinearSize); + HeapFree(GetProcessHeap(), 0, texture); + return DDERR_INVALIDPARAMS; + } } else { @@ -5952,6 +5961,14 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_ HeapFree(GetProcessHeap(), 0, texture); return DDERR_INVALIDPARAMS; } + + if (desc->u1.lPitch < wined3d_calculate_format_pitch(ddraw->wined3d, WINED3DADAPTER_DEFAULT, + wined3d_desc.format, wined3d_desc.width) || desc->u1.lPitch & 3) + { + WARN("Invalid pitch %u specified.\n", desc->u1.lPitch); + HeapFree(GetProcessHeap(), 0, texture); + return DDERR_INVALIDPARAMS; + } } } @@ -6177,13 +6194,6 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, s { if (desc->dwFlags & DDSD_LPSURFACE) { - if ((desc->dwFlags & DDSD_LINEARSIZE) - && desc->u1.dwLinearSize < wined3d_surface_get_pitch(wined3d_surface) * ((desc->dwHeight + 3) / 4)) - { - WARN("Invalid linear size %u specified.\n", desc->u1.dwLinearSize); - return DDERR_INVALIDPARAMS; - } - if (FAILED(hr = wined3d_surface_update_desc(wined3d_surface, wined3d_desc.width, wined3d_desc.height, wined3d_desc.format, WINED3D_MULTISAMPLE_NONE, 0, desc->lpSurface, 0))) @@ -6207,13 +6217,6 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, s { if (desc->dwFlags & DDSD_LPSURFACE) { - if (desc->u1.lPitch < wined3d_calculate_format_pitch(ddraw->wined3d, WINED3DADAPTER_DEFAULT, - wined3d_desc.format, wined3d_desc.width) || desc->u1.lPitch & 3) - { - WARN("Invalid pitch %u specified.\n", desc->u1.lPitch); - return DDERR_INVALIDPARAMS; - } - if (FAILED(hr = wined3d_surface_update_desc(wined3d_surface, wined3d_desc.width, wined3d_desc.height, wined3d_desc.format, WINED3D_MULTISAMPLE_NONE, 0, desc->lpSurface, desc->u1.lPitch)))