Limit the sequential bytes skipping to a max 16kB at a time.
authorMichael Goddard <michael.goddard@nokia.com>
Fri, 21 Oct 2011 01:32:21 +0000 (11:32 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 21 Oct 2011 01:39:15 +0000 (03:39 +0200)
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>
src/multimedia/effects/qwavedecoder_p.cpp

index 8ee0d59..eb65a3a 100644 (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