From 52a83ffe4ef1ef58520b09f8d2144dcf291b622b Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Wed, 21 Sep 2022 08:51:02 +0200 Subject: [PATCH] avifil32: Fix GCC 12.2 warning (-Warray-bounds). Since struct _IAVIStreamImpl has a pointer to a WAVEFORMATEX, GCC 12.2 emits warning when dereferencing that pointer when the block has been allocated with sizeof(PCMWAVEFORMAT). The warning is fixed by always allocating with sizeof(WAVEFORMATEX). This will overallocate in case of a PCM stream. The alternative would have been to store in struct _IAVIStreamImpl a pointer to PCMWAVEFORMAT instead, and add the casting to a WAVEFORMATEX when needed. That would clutter the code IMO since most of the ACM APIs expect a LPWAVEFORMATEX. /home/eric/work/wine/dlls/avifil32/acmstream.c: In function 'AVIFILE_OpenCompressor': /home/eric/work/wine/dlls/avifil32/acmstream.c:105:24: warning: array subscript 'struct tWAVEFORMATEX[0]' is partly outside array bounds of 'unsigned char[16]' [-Warray-bounds] 105 | This->lpOutFormat->wFormatTag = WAVE_FORMAT_PCM; | ^~ /home/eric/work/wine/dlls/avifil32/acmstream.c:101:27: note: object of size 16 allocated by 'HeapAlloc' 101 | This->lpOutFormat = HeapAlloc(GetProcessHeap(), 0, This->cbOutFormat); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Signed-off-by: Eric Pouech --- dlls/avifil32/acmstream.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/avifil32/acmstream.c b/dlls/avifil32/acmstream.c index fe5a8e3660b..be8c7b7dc33 100644 --- a/dlls/avifil32/acmstream.c +++ b/dlls/avifil32/acmstream.c @@ -97,7 +97,7 @@ static HRESULT AVIFILE_OpenCompressor(IAVIStreamImpl *This) if (This->lpOutFormat == NULL) { /* we must decode to default format */ - This->cbOutFormat = sizeof(PCMWAVEFORMAT); + This->cbOutFormat = sizeof(WAVEFORMATEX); This->lpOutFormat = HeapAlloc(GetProcessHeap(), 0, This->cbOutFormat); if (This->lpOutFormat == NULL) return AVIERR_MEMORY; @@ -249,7 +249,7 @@ static HRESULT WINAPI ACMStream_fnCreate(IAVIStream *iface, LPARAM lParam1, if (((LPWAVEFORMATEX)lParam2)->wFormatTag != WAVE_FORMAT_PCM) This->cbOutFormat = sizeof(WAVEFORMATEX) + ((LPWAVEFORMATEX)lParam2)->cbSize; else - This->cbOutFormat = sizeof(PCMWAVEFORMAT); + This->cbOutFormat = sizeof(WAVEFORMATEX); This->lpOutFormat = HeapAlloc(GetProcessHeap(), 0, This->cbOutFormat); if (This->lpOutFormat == NULL)