From d64a68f5c8386e82fe9aa5e8eaf94f78124602f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Wed, 20 Mar 2013 19:45:40 +0100 Subject: [PATCH] Fix calculation bug in QWaveDecoder. When comparing the size of the WaveHeader and the chunk size, we need to include the ID and Size fields, or any extra data won't be discarded and the parsing will fail. Change-Id: I730833f33f57b26cd750985354136191f7e7ce04 Reviewed-by: Yoann Lopes --- src/multimedia/audio/qwavedecoder_p.cpp | 8 +++++--- .../data/isawav_1_16_44100_le_2.wav | Bin 0 -> 22096 bytes .../auto/unit/qwavedecoder/tst_qwavedecoder.cpp | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 tests/auto/unit/qwavedecoder/data/isawav_1_16_44100_le_2.wav diff --git a/src/multimedia/audio/qwavedecoder_p.cpp b/src/multimedia/audio/qwavedecoder_p.cpp index 4b036b20..b75bfaf8 100644 --- a/src/multimedia/audio/qwavedecoder_p.cpp +++ b/src/multimedia/audio/qwavedecoder_p.cpp @@ -153,13 +153,15 @@ void QWaveDecoder::handleData() chunk descriptor; peekChunk(&descriptor); - if (source->bytesAvailable() < qint64(descriptor.size + sizeof(chunk))) + quint32 rawChunkSize = descriptor.size + sizeof(chunk); + if (source->bytesAvailable() < qint64(rawChunkSize)) return; WAVEHeader wave; source->read(reinterpret_cast(&wave), sizeof(WAVEHeader)); - if (descriptor.size > sizeof(WAVEHeader)) - discardBytes(descriptor.size - sizeof(WAVEHeader)); + + if (rawChunkSize > sizeof(WAVEHeader)) + discardBytes(rawChunkSize - sizeof(WAVEHeader)); // Swizzle this if (bigEndian) { diff --git a/tests/auto/unit/qwavedecoder/data/isawav_1_16_44100_le_2.wav b/tests/auto/unit/qwavedecoder/data/isawav_1_16_44100_le_2.wav new file mode 100644 index 0000000000000000000000000000000000000000..087e68e82e22a99e1c0e3838750ac8f247ad47e3 GIT binary patch literal 22096 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