Fix allocated memory of QByteArray returned by QIODevice::readLine

If the maxSize argument is 0 (the default), QIODevice::readLine will
allocate a QByteArray with the size of the next chunk of data, which
may be quite large. Before returning, it then resizes the byte array
to the actual size that was read.

But since change 6b884d2aa1, QByteArray::resize() does no
longer shrink the capacity. This means that the returned QByteArray
keeps it's maximum size as allocated memory. This can lead to
excessive memory consumption, especially if the returned QByteArray's
are stored for further processing in the client code.

Fix this by explicitly calling QByteArray::squeeze() before returning.

[ChangeLog][QtCore][QIODevice] Fixes a regression in Qt 5.15 causing
QByteArray's that are returned by QIODevice::readLine() to
consume large amounts of memory.

Fixes: QTBUG-87010
Pick-to: 5.15
Change-Id: I1f95fc4098849e900680fc945238bfeda881022c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Kai Koehne 2020-10-13 15:47:31 +02:00 committed by Thiago Macieira
parent 0096562299
commit 263b29eedb
1 changed files with 1 additions and 0 deletions

View File

@ -1470,6 +1470,7 @@ QByteArray QIODevice::readLine(qint64 maxSize)
else
result.resize(readBytes);
result.squeeze();
return result;
}