Fix QByteArray::to{Upper,Lower} when the array contains embedded nulls
[ChangeLog][QtCore][QByteArray] Fixed a bug that would cause QByteArray to stop converting toUpper or toLower at the first embedded null character. Change-Id: Ia369037206617813d86a8f1489589243c82aa51b Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
parent
5aacc43e64
commit
5d11688d02
@ -2697,8 +2697,9 @@ QByteArray QByteArray::toLower() const
|
|||||||
{
|
{
|
||||||
QByteArray s(*this);
|
QByteArray s(*this);
|
||||||
uchar *p = reinterpret_cast<uchar *>(s.data());
|
uchar *p = reinterpret_cast<uchar *>(s.data());
|
||||||
|
uchar *e = reinterpret_cast<uchar *>(s.end());
|
||||||
if (p) {
|
if (p) {
|
||||||
while (*p) {
|
while (p != e) {
|
||||||
*p = QChar::toLower((ushort)*p);
|
*p = QChar::toLower((ushort)*p);
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
@ -2720,8 +2721,9 @@ QByteArray QByteArray::toUpper() const
|
|||||||
{
|
{
|
||||||
QByteArray s(*this);
|
QByteArray s(*this);
|
||||||
uchar *p = reinterpret_cast<uchar *>(s.data());
|
uchar *p = reinterpret_cast<uchar *>(s.data());
|
||||||
|
uchar *e = reinterpret_cast<uchar *>(s.end());
|
||||||
if (p) {
|
if (p) {
|
||||||
while (*p) {
|
while (p != e) {
|
||||||
*p = QChar::toUpper((ushort)*p);
|
*p = QChar::toUpper((ushort)*p);
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
@ -151,6 +151,8 @@ private slots:
|
|||||||
#if defined(Q_COMPILER_LAMBDA)
|
#if defined(Q_COMPILER_LAMBDA)
|
||||||
void literals();
|
void literals();
|
||||||
#endif
|
#endif
|
||||||
|
void toUpperLower_data();
|
||||||
|
void toUpperLower();
|
||||||
|
|
||||||
void macTypes();
|
void macTypes();
|
||||||
|
|
||||||
@ -1999,6 +2001,31 @@ void tst_QByteArray::literals()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void tst_QByteArray::toUpperLower_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QByteArray>("input");
|
||||||
|
QTest::addColumn<QByteArray>("upper");
|
||||||
|
QTest::addColumn<QByteArray>("lower");
|
||||||
|
|
||||||
|
QTest::newRow("empty") << QByteArray() << QByteArray() << QByteArray();
|
||||||
|
QTest::newRow("ascii") << QByteArray("Hello World, this is a STRING")
|
||||||
|
<< QByteArray("HELLO WORLD, THIS IS A STRING")
|
||||||
|
<< QByteArray("hello world, this is a string");
|
||||||
|
QTest::newRow("latin1") << QByteArray("R\311sum\351")
|
||||||
|
<< QByteArray("R\311SUM\311")
|
||||||
|
<< QByteArray("r\351sum\351");
|
||||||
|
QTest::newRow("nul") << QByteArray("a\0B", 3) << QByteArray("A\0B", 3) << QByteArray("a\0b", 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QByteArray::toUpperLower()
|
||||||
|
{
|
||||||
|
QFETCH(QByteArray, input);
|
||||||
|
QFETCH(QByteArray, upper);
|
||||||
|
QFETCH(QByteArray, lower);
|
||||||
|
QCOMPARE(input.toUpper(), upper);
|
||||||
|
QCOMPARE(input.toLower(), lower);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QByteArray::macTypes()
|
void tst_QByteArray::macTypes()
|
||||||
{
|
{
|
||||||
#ifndef Q_OS_MAC
|
#ifndef Q_OS_MAC
|
||||||
|
Loading…
Reference in New Issue
Block a user