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>
This commit is contained in:
Michael Goddard
2011-10-21 11:32:21 +10:00
committed by Qt by Nokia
parent 4be55afa6c
commit cbb21e30d5

View File

@@ -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