fix out-of-bounds access on trailing percent sign in tr() argument
tr() recognizes %n and %Ln. it offers no way to escape lone percent signs, which implies that they must be interpreted verbatim, which is what the code actually does. except that it would run off the end if the % appeared at the end of the string. Fixes: QTBUG-57171 Done-with: Mateusz Starzycki <mstarzycki@gmail.com> Change-Id: Icf81925c482be1ea66ec8daafb3e92ad17ea7fab Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
This commit is contained in:
parent
6178913a23
commit
c365fa49d8
@ -2097,9 +2097,13 @@ static void replacePercentN(QString *result, int n)
|
||||
int len = 0;
|
||||
while ((percentPos = result->indexOf(QLatin1Char('%'), percentPos + len)) != -1) {
|
||||
len = 1;
|
||||
if (percentPos + len == result->length())
|
||||
break;
|
||||
QString fmt;
|
||||
if (result->at(percentPos + len) == QLatin1Char('L')) {
|
||||
++len;
|
||||
if (percentPos + len == result->length())
|
||||
break;
|
||||
fmt = QLatin1String("%L1");
|
||||
} else {
|
||||
fmt = QLatin1String("%1");
|
||||
|
@ -928,6 +928,12 @@ void tst_QCoreApplication::threadedEventDelivery()
|
||||
thread.start();
|
||||
QVERIFY(thread.wait(1000));
|
||||
QCOMPARE(receiver.recordedEvents.contains(QEvent::User + 1), eventsReceived);
|
||||
|
||||
}
|
||||
|
||||
void tst_QCoreApplication::testTrWithPercantegeAtTheEnd()
|
||||
{
|
||||
QCoreApplication::translate("testcontext", "this will crash%", "testdisamb", 3);
|
||||
}
|
||||
|
||||
#if QT_CONFIG(library)
|
||||
|
@ -59,6 +59,7 @@ private slots:
|
||||
void applicationEventFilters_auxThread();
|
||||
void threadedEventDelivery_data();
|
||||
void threadedEventDelivery();
|
||||
void testTrWithPercantegeAtTheEnd();
|
||||
#if QT_CONFIG(library)
|
||||
void addRemoveLibPaths();
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user