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 <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
This commit is contained in:
Marc Mutz 2024-01-30 11:33:13 +01:00
parent 6504496c64
commit a327117c0d

View File

@ -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;