[PATCH 0/1] MR10381: mmdevapi: Don't assume WAVEFORMATEX is a WAVEFORMATEXTENSIBLE.
IAudioClient_IsFormatSupported is given a WAVEFORMATEX, we can't assume it's a WAVEFORMATEXTENSIBLE without checking its cbSize. For example, WINMM_TestFormat only passes a WAVEFORMATEX. Found by ASan. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10381
From: Yuxuan Shui <yshui@codeweavers.com> IAudioClient_IsFormatSupported is given a WAVEFORMATEX, we can't assume it's a WAVEFORMATEXTENSIBLE without checking its cbSize. For example, WINMM_TestFormat only passes a WAVEFORMATEX. Found by ASan. --- dlls/mmdevapi/client.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dlls/mmdevapi/client.c b/dlls/mmdevapi/client.c index 4c23905aad8..afe8af2e64b 100644 --- a/dlls/mmdevapi/client.c +++ b/dlls/mmdevapi/client.c @@ -358,11 +358,13 @@ skip: return wcsdup(name); } -HRESULT validate_fmt(const WAVEFORMATEXTENSIBLE *fmt, BOOL compatible) +HRESULT validate_fmt(const WAVEFORMATEX *fmt, BOOL compatible) { - WAVEFORMATEXTENSIBLE fmt2 = *fmt; + WAVEFORMATEXTENSIBLE fmt2 = {0}; HRESULT ret; + memcpy(&fmt2, fmt, sizeof(WAVEFORMATEX) + fmt->cbSize); + /* Reduce non-extensible formats to extensible ones. */ if (fmt2.Format.wFormatTag != WAVE_FORMAT_EXTENSIBLE) { @@ -485,7 +487,7 @@ static HRESULT stream_init(struct audio_client *client, const BOOLEAN force_def_ CoTaskMemFree(mix_fmt); } - hr = validate_fmt((const WAVEFORMATEXTENSIBLE *)fmt, compatible); + hr = validate_fmt(fmt, compatible); if (hr != S_OK) return hr; @@ -878,7 +880,7 @@ static HRESULT WINAPI client_IsFormatSupported(IAudioClient3 *iface, AUDCLNT_SHA CoTaskMemFree(mix_fmt); } - hr = validate_fmt((const WAVEFORMATEXTENSIBLE *)fmt, TRUE); + hr = validate_fmt(fmt, TRUE); if (hr == S_OK && !compatible) hr = S_FALSE; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10381
Dup of !10326 ? -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10381#note_132995
Ah yeah, I was a bit too late. Closing. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10381#note_133349
This merge request was closed by Yuxuan Shui. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10381
participants (3)
-
Huw Davies (@huw) -
Yuxuan Shui -
Yuxuan Shui (@yshui)