From: Brendan McGrath brendan@redmandi.com
--- dlls/mf/tests/transform.c | 6 +++--- dlls/winegstreamer/aac_decoder.c | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 1f9d1cd5632..dcc707b9722 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -2945,10 +2945,10 @@ static void test_aac_decoder_user_data(void) BOOL todo; BOOL todo_short; } tests[] = { - { "aac", aac_input_type_desc, S_OK, FALSE, TRUE }, - { "raw aac", raw_aac_input_type_desc, S_OK, FALSE, TRUE }, + { "aac", aac_input_type_desc, S_OK }, + { "raw aac", raw_aac_input_type_desc, S_OK }, { "raw aac long", raw_aac_input_type_desc_long, S_OK, FALSE, TRUE }, - { "raw aac 48Khz", raw_aac_input_type_desc_48khz, S_OK, FALSE, TRUE }, + { "raw aac 48Khz", raw_aac_input_type_desc_48khz, S_OK }, { "raw aac mismatch", raw_aac_input_type_desc_mismatch, MF_E_INVALIDMEDIATYPE, TRUE }, };
diff --git a/dlls/winegstreamer/aac_decoder.c b/dlls/winegstreamer/aac_decoder.c index d8e8246e1ca..f3b72932b05 100644 --- a/dlls/winegstreamer/aac_decoder.c +++ b/dlls/winegstreamer/aac_decoder.c @@ -32,6 +32,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(mfplat); WINE_DECLARE_DEBUG_CHANNEL(winediag);
+#define CBSIZE(x) (sizeof(x) - sizeof(WAVEFORMATEX)) + #define NEXT_WAVEFORMATEXTENSIBLE(format) (WAVEFORMATEXTENSIBLE *)((BYTE *)(&(format)->Format + 1) + (format)->Format.cbSize)
static WAVEFORMATEXTENSIBLE const aac_decoder_output_types[] = @@ -356,7 +358,10 @@ static HRESULT WINAPI transform_SetInputType(IMFTransform *iface, DWORD id, IMFM if (!count) return MF_E_INVALIDMEDIATYPE;
- if (wfx.Format.nChannels >= ARRAY_SIZE(default_channel_mask) || !wfx.Format.nSamplesPerSec || !wfx.Format.cbSize) + if (wfx.Format.nChannels >= ARRAY_SIZE(default_channel_mask) || !wfx.Format.nSamplesPerSec + /* 2 is the minimum size of AudioSpecificConfig() */ + || wfx.Format.cbSize < 2 + CBSIZE(WAVEFORMATEXTENSIBLE) || (IsEqualGUID(&wfx.SubFormat, &MFAudioFormat_AAC) + && wfx.Format.cbSize < 2 + CBSIZE(WAVEFORMATEXTENSIBLE) + CBSIZE(HEAACWAVEINFO))) return MF_E_INVALIDMEDIATYPE; if (flags & MFT_SET_TYPE_TEST_ONLY) return S_OK;