Check the maximum size of a QByteArray more precisely

Also document that the QByteArrray::MaxSize takes a trailing '\0' into
account.

Change-Id: I89e9a0d1a80a49b33efbac16ff7aa2a98f0e5670
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Alex Trotsenko 2015-05-08 16:17:00 +03:00
parent bf06924f3f
commit ada8f1985d
2 changed files with 6 additions and 5 deletions

View File

@ -989,7 +989,7 @@ QByteArray QIODevice::readAll()
// Size is unknown, read incrementally.
qint64 readResult;
do {
if (quint64(readBytes) + QIODEVICE_BUFFERSIZE > QByteArray::MaxSize) {
if (quint64(readBytes) + QIODEVICE_BUFFERSIZE >= QByteArray::MaxSize) {
// If resize would fail, don't read more, return what we have.
break;
}
@ -1001,7 +1001,7 @@ QByteArray QIODevice::readAll()
} else {
// Read it all in one go.
// If resize fails, don't read anything.
if (quint64(readBytes + theSize - d->pos) > QByteArray::MaxSize)
if (quint64(readBytes + theSize - d->pos) >= QByteArray::MaxSize)
return QByteArray();
result.resize(int(readBytes + theSize - d->pos));
readBytes += read(result.data() + readBytes, result.size() - readBytes);

View File

@ -124,7 +124,7 @@ int qFindByteArray(
int qAllocMore(int alloc, int extra) Q_DECL_NOTHROW
{
Q_ASSERT(alloc >= 0 && extra >= 0);
Q_ASSERT_X(uint(alloc) < QByteArray::MaxSize, "qAllocMore", "Requested size is too large!");
Q_ASSERT_X(uint(alloc) <= QByteArray::MaxSize, "qAllocMore", "Requested size is too large!");
unsigned nalloc = qNextPowerOfTwo(alloc + extra);
@ -842,8 +842,9 @@ static inline char qToLower(char c)
\internal
\since 5.4
The maximum size of a QByteArray, in bytes. Also applies to a the maximum
storage size of QString and QVector, though not the number of elements.
The maximum size of a QByteArray (including a '\0' terminator), in bytes.
Also applies to the maximum storage size of QString and QVector, though
not the number of elements.
*/
/*!