QByteArray: make replace(pos, len, view) consistent with QString's
Return early if `pos` is out-of-bounds. Amends 57d91d8029064b592dee8adf819bde676763df28 (also part of this commit message was borrowed from it). [ChangeLog][QtCore][Important Behavior Changes][QByteArray] replace() is now consistent with QString::replace() in its treatment of out-of-bounds indexes. Change-Id: Iae8cf795364654fd6438b2a4ed3162925a73cb9e Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
2da64908c2
commit
a15639a3ab
@ -2477,11 +2477,17 @@ QByteArray &QByteArray::remove(qsizetype pos, qsizetype len)
|
|||||||
|
|
||||||
QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView after)
|
QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView after)
|
||||||
{
|
{
|
||||||
|
if (size_t(pos) > size_t(this->size()))
|
||||||
|
return *this;
|
||||||
|
if (len > this->size() - pos)
|
||||||
|
len = this->size() - pos;
|
||||||
|
|
||||||
if (QtPrivate::q_points_into_range(after.data(), d)) {
|
if (QtPrivate::q_points_into_range(after.data(), d)) {
|
||||||
QVarLengthArray copy(after.data(), after.data() + after.size());
|
QVarLengthArray copy(after.data(), after.data() + after.size());
|
||||||
return replace(pos, len, QByteArrayView{copy});
|
return replace(pos, len, QByteArrayView{copy});
|
||||||
}
|
}
|
||||||
if (len == after.size() && (pos + len <= size())) {
|
|
||||||
|
if (len == after.size()) {
|
||||||
// same size: in-place replacement possible
|
// same size: in-place replacement possible
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
detach();
|
detach();
|
||||||
|
@ -1481,7 +1481,7 @@ void tst_QByteArray::replace_data()
|
|||||||
QTest::newRow("4") << QByteArray() << 0 << 0 << QByteArray() << QByteArray() << QByteArray();
|
QTest::newRow("4") << QByteArray() << 0 << 0 << QByteArray() << QByteArray() << QByteArray();
|
||||||
// index out of range
|
// index out of range
|
||||||
QTest::newRow("5") << QByteArray() << 3 << 0 << QByteArray() << QByteArray("hi")
|
QTest::newRow("5") << QByteArray() << 3 << 0 << QByteArray() << QByteArray("hi")
|
||||||
<< QByteArray(" hi");
|
<< QByteArray();
|
||||||
// Optimized path
|
// Optimized path
|
||||||
QTest::newRow("6") << QByteArray("abcdef") << 3 << 12 << QByteArray()
|
QTest::newRow("6") << QByteArray("abcdef") << 3 << 12 << QByteArray()
|
||||||
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
|
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user