summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Goddard <michael.goddard@nokia.com>2011-10-21 11:32:21 +1000
committerQt by Nokia <qt-info@nokia.com>2011-10-21 03:39:15 +0200
commitcbb21e30d5cd18d17d60a049087f98a82c2862b9 (patch)
treef169c6c608c6b2eaaf0d793fd53d7e2175e32d7e
parent4be55afa6c4da44bbc56122e8785a221f2fe4c4e (diff)
downloadqtmultimedia-cbb21e30d5cd18d17d60a049087f98a82c2862b9.tar.gz
Limit the sequential bytes skipping to a max 16kB at a time.
Otherwise QIODevice::read will try and allocate whatever junk is passed in, so a corrupt chunk can result in 1GB+ allocations which are never actually used. Change-Id: I1ea4a5c1a5d21b1ee6f7e428105c52c0ee6ca7f7 Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
-rw-r--r--src/multimedia/effects/qwavedecoder_p.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/multimedia/effects/qwavedecoder_p.cpp b/src/multimedia/effects/qwavedecoder_p.cpp
index 8ee0d59c2..eb65a3aca 100644
--- a/src/multimedia/effects/qwavedecoder_p.cpp
+++ b/src/multimedia/effects/qwavedecoder_p.cpp
@@ -290,7 +290,7 @@ void QWaveDecoder::discardBytes(qint64 numBytes)
// If the iodevice doesn't have this many bytes in it,
// remember how much more junk we have to skip.
if (source->isSequential()) {
- QByteArray r = source->read(numBytes); // uggh, wasted memory
+ QByteArray r = source->read(qMin(numBytes, qint64(16384))); // uggh, wasted memory, limit to a max of 16k
if (r.size() < numBytes)
junkToSkip = numBytes - r.size();
else