QByteArray: change append(QByteArray) to match QStringBuilder behavior

I.e. concatenating a null byte array and an empty-but-not-null byte
array should result in an empty-but-not-null byte array.

This matches the behavior of QString::append(QString) too.

Fixes: QTBUG-114238
Pick-to: 6.6
Change-Id: Id36d10ee09c08041b7dabda102df48ca6d413d8b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Ahmad Samir 2023-06-15 02:39:19 +03:00
parent d1da83002d
commit 8ed2bc9194
2 changed files with 26 additions and 3 deletions

View File

@ -2044,9 +2044,14 @@ QByteArray &QByteArray::prepend(const QByteArray &ba)
QByteArray &QByteArray::append(const QByteArray &ba)
{
if (size() == 0 && ba.size() > d->freeSpaceAtEnd() && ba.d.isMutable())
return (*this = ba);
return append(QByteArrayView(ba));
if (!ba.isNull()) {
if (isNull()) {
operator=(ba);
} else if (ba.size()) {
append(QByteArrayView(ba));
}
}
return *this;
}
/*!

View File

@ -53,6 +53,7 @@ private slots:
void append();
void appendExtended_data();
void appendExtended();
void appendEmptyNull();
void assign();
void assignShared();
void assignUsesPrependBuffer();
@ -937,6 +938,23 @@ void tst_QByteArray::appendExtended()
QCOMPARE(array.size(), 11);
}
void tst_QByteArray::appendEmptyNull()
{
QByteArray a;
QVERIFY(a.isEmpty());
QVERIFY(a.isNull());
QByteArray b("");
QVERIFY(b.isEmpty());
QVERIFY(!b.isNull());
// Concatenating a null and an empty-but-not-null byte arrays results in
// an empty but not null byte array
QByteArray r = a + b;
QVERIFY(r.isEmpty());
QVERIFY(!r.isNull());
}
void tst_QByteArray::assign()
{
// QByteArray &assign(QByteArrayView)