From a327117c0d851dac4eea860e7d86ef3f80a0ffce Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 30 Jan 2024 11:33:13 +0100 Subject: [PATCH] QBitArray: defend resize() and fromBits() against negative sizes Use the same technique the constructor already uses: Q_ASSERT followed by selecting the no-op branch in case assertions are compiled out. Pick-to: 6.7 Change-Id: I24cbcfd686f67e060134baecfb21044948b6eb98 Reviewed-by: Qt CI Bot Reviewed-by: Thiago Macieira Reviewed-by: Allan Sandfeld Jensen --- src/corelib/tools/qbitarray.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qbitarray.cpp b/src/corelib/tools/qbitarray.cpp index 7cea2fa9262..e311fee51f1 100644 --- a/src/corelib/tools/qbitarray.cpp +++ b/src/corelib/tools/qbitarray.cpp @@ -205,7 +205,8 @@ qsizetype QBitArray::count(bool on) const */ void QBitArray::resize(qsizetype size) { - if (!size) { + Q_ASSERT_X(size >= 0, "QBitArray::resize", "Size must be greater than or equal to 0."); + if (size <= 0) { d.resize(0); } else { d.resize(allocation_size(size), 0x00); @@ -305,8 +306,9 @@ void QBitArray::fill(bool value, qsizetype begin, qsizetype end) */ QBitArray QBitArray::fromBits(const char *data, qsizetype size) { + Q_ASSERT_X(size >= 0, "QBitArray::fromBits", "Size must be greater than or equal to 0."); QBitArray result; - if (size == 0) + if (size <= 0) return result; auto &d = result.d;