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.

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>
(cherry picked from commit a327117c0d851dac4eea860e7d86ef3f80a0ffce)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2024-01-30 11:33:13 +01:00 committed by Qt Cherry-pick Bot
parent 03e184e48c
commit da0620727f

View File

@ -203,7 +203,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);
@ -303,8 +304,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;