QVarLengthArray: call sizedFree() with the capacity and not the size

Using the size accidentally worked since most of the time Qt adds
elements one by one to QVLAs.

Amends 03d5daf9437d8b46db2e89e3a9763ea701fa681c.

Change-Id: I9ee6500b758f2ebf6dcc5ae8e898d3241f10af41
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
This commit is contained in:
Aurélien Brooke 2025-04-12 09:21:19 +02:00
parent 0b668c2f55
commit 10d7de1f5c

View File

@ -869,11 +869,12 @@ Q_OUTOFLINE_TEMPLATE void QVLABase<T>::reallocate_impl(qsizetype prealloc, void
Q_ASSERT(data()); Q_ASSERT(data());
T *oldPtr = data(); T *oldPtr = data();
qsizetype osize = size(); qsizetype osize = size();
const qsizetype oalloc = capacity();
const qsizetype copySize = qMin(asize, osize); const qsizetype copySize = qMin(asize, osize);
Q_ASSERT(copySize >= 0); Q_ASSERT(copySize >= 0);
if (aalloc != capacity()) { if (aalloc != oalloc) {
QVLABaseBase::malloced_ptr guard; QVLABaseBase::malloced_ptr guard;
void *newPtr; void *newPtr;
qsizetype newA; qsizetype newA;
@ -903,7 +904,7 @@ Q_OUTOFLINE_TEMPLATE void QVLABase<T>::reallocate_impl(qsizetype prealloc, void
} }
if (oldPtr != reinterpret_cast<T *>(array) && oldPtr != data()) if (oldPtr != reinterpret_cast<T *>(array) && oldPtr != data())
QtPrivate::sizedFree(oldPtr, osize, sizeof(T)); QtPrivate::sizedFree(oldPtr, oalloc, sizeof(T));
} }
template <class T> template <class T>