summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@qt.io>2020-10-13 15:47:31 +0200
committerThiago Macieira <thiago.macieira@intel.com>2020-10-18 17:46:14 +0000
commit263b29eedb223dec1ecaee193302070af87a1852 (patch)
tree4180a518cebb65639f5d81ea05878e210ac2c153 /src
parent009656229943445e73225eb4b5d7975454cf0b63 (diff)
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 6b884d2aa129, 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>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/io/qiodevice.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index 924876b785..48f259e350 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -1470,6 +1470,7 @@ QByteArray QIODevice::readLine(qint64 maxSize)
else
result.resize(readBytes);
+ result.squeeze();
return result;
}