QString::assign: Don't crash when passed an empty range
Pick-to: 6.7 Change-Id: I7c02abeb1bd8fa5a8609f163a5a722c2c236fc2b Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit aa2cfb58089dcf46d14606964e30d1c695b64393) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
a6e3710875
commit
0cbf579ca1
@ -520,10 +520,12 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
} else if constexpr (QtPrivate::IsCompatibleChar8Type<V>::value) {
|
} else if constexpr (QtPrivate::IsCompatibleChar8Type<V>::value) {
|
||||||
assign_helper_char8(first, last);
|
assign_helper_char8(first, last);
|
||||||
|
if (d.constAllocatedCapacity())
|
||||||
d.data()[d.size] = u'\0';
|
d.data()[d.size] = u'\0';
|
||||||
return *this;
|
return *this;
|
||||||
} else {
|
} else {
|
||||||
d.assign(first, last, [](QChar ch) -> char16_t { return ch.unicode(); });
|
d.assign(first, last, [](QChar ch) -> char16_t { return ch.unicode(); });
|
||||||
|
if (d.constAllocatedCapacity())
|
||||||
d.data()[d.size] = u'\0';
|
d.data()[d.size] = u'\0';
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -3668,6 +3668,25 @@ void tst_QString::assign()
|
|||||||
QCOMPARE(str.size(), 3);
|
QCOMPARE(str.size(), 3);
|
||||||
}
|
}
|
||||||
// QString &assign(InputIterator, InputIterator)
|
// QString &assign(InputIterator, InputIterator)
|
||||||
|
{
|
||||||
|
// This needs to be on its own to ensure we call them on empty str
|
||||||
|
QString str;
|
||||||
|
|
||||||
|
const char16_t c16[] = u"٩(⁎❛ᴗ❛⁎)۶ 🤷";
|
||||||
|
std::u16string c16str(c16);
|
||||||
|
str.assign(c16str.begin(), c16str.begin());
|
||||||
|
QCOMPARE(str.size(), 0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
#ifndef QT_NO_CAST_FROM_ASCII
|
||||||
|
// This needs to be on its own to ensure we call them on empty str
|
||||||
|
QString str;
|
||||||
|
const char c8[] = "a©☻🂤"; // [1, 2, 3, 4] bytes in utf-8 code points
|
||||||
|
std::string c8str(c8);
|
||||||
|
str.assign(c8str.begin(), c8str.begin());
|
||||||
|
QCOMPARE(str.size(), 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
{
|
{
|
||||||
// Forward iterator versions
|
// Forward iterator versions
|
||||||
QString str;
|
QString str;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user