Module: wine Branch: stable Commit: 29fdccb7d1a189c1c8d32e9fa36ee0f00fd39a32 URL: https://gitlab.winehq.org/wine/wine/-/commit/29fdccb7d1a189c1c8d32e9fa36ee0f...
Author: Eric Pouech epouech@codeweavers.com Date: Wed May 3 09:00:19 2023 +0200
evr: Fix incorrect integral computation.
Note: typeof (int * unsigned) is unsigned. So: - on 64bit CPUs, where sizeof(int) = 4 < sizeof(void*) = 8, - when the result of the multiplication is supposed to be negative - there's no propagation of the negative sign from 32bit to 64 bit integers
Fixes a crash in Age of Empire II.
Signed-off-by: Eric Pouech epouech@codeweavers.com (cherry picked from commit 0cc4a38aae9ded4493550bbff8d51f49d71c9dd6)
---
dlls/evr/evr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/evr/evr.c b/dlls/evr/evr.c index 26a2a3a1eb5..803c1d2dff9 100644 --- a/dlls/evr/evr.c +++ b/dlls/evr/evr.c @@ -382,7 +382,7 @@ static HRESULT evr_copy_sample_buffer(struct evr *filter, IMediaSample *input_sa { if (SUCCEEDED(hr = IDirect3DSurface9_LockRect(surface, &locked_rect, NULL, D3DLOCK_DISCARD))) { - if (src_stride < 0) src -= src_stride * (lines - 1); + if (src_stride < 0) src += (-src_stride) * (lines - 1); MFCopyImage(locked_rect.pBits, locked_rect.Pitch, src, src_stride, width * 4, lines); IDirect3DSurface9_UnlockRect(surface); }