Fix logic error in QString::replace(ch, after, cs)
Coverage analysis showed that an if-branch marked "Q_LIKELY" was never taken. It turns out the code was incorrect, but behaved correctly. This patch fixes the logic and adds a unit test. Pick-to: 5.15 Change-Id: I9b4ba76392b52f07b8e21188496e23f98dba95a9 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
d3ba1b321b
commit
ebaae45ea1
|
|
@ -3382,7 +3382,7 @@ QString& QString::replace(QChar ch, const QString &after, Qt::CaseSensitivity cs
|
|||
|
||||
replace_helper(indices, pos, 1, after.constData(), after.size());
|
||||
|
||||
if (Q_LIKELY(index == -1)) // Nothing left to replace
|
||||
if (Q_LIKELY(index == size())) // Nothing left to replace
|
||||
break;
|
||||
// The call to replace_helper just moved what index points at:
|
||||
index += pos*(after.size() - 1);
|
||||
|
|
|
|||
|
|
@ -2876,6 +2876,17 @@ void tst_QString::replace_string_extra()
|
|||
s.replace( QString("BBB"), smallReplacement );
|
||||
QCOMPARE( s, smallReplacement );
|
||||
}
|
||||
|
||||
{
|
||||
QString s(QLatin1String("BBB"));
|
||||
QString expected(QLatin1String("BBB"));
|
||||
for (int i = 0; i < 1028; ++i) {
|
||||
s.append("X");
|
||||
expected.append("GXU");
|
||||
}
|
||||
s.replace(QChar('X'), "GXU");
|
||||
QCOMPARE(s, expected);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QString::replace_regexp()
|
||||
|
|
|
|||
Loading…
Reference in New Issue