QML: Don't crash the parser on certain kinds of bad input

Fixes: QTBUG-72734
Change-Id: I92146ec517c6a26a67e13830618e137f2a3021c2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
Ulf Hermann 2019-02-15 14:04:54 +01:00
parent 94d30df911
commit 885e4af1f4
2 changed files with 16 additions and 2 deletions

View File

@ -3963,8 +3963,12 @@ ClassElementList: ClassElement;
ClassElementList: ClassElementList ClassElement;
/.
case $rule_number: {
if (sym(2).Node)
sym(1).ClassElementList = sym(1).ClassElementList->append(sym(2).ClassElementList);
if (sym(1).Node) {
if (sym(2).Node)
sym(1).ClassElementList = sym(1).ClassElementList->append(sym(2).ClassElementList);
} else if (sym(2).Node) {
sym(1).Node = sym(2).Node;
}
} break;
./

View File

@ -53,6 +53,7 @@ private slots:
void stringLiteral();
void noSubstitutionTemplateLiteral();
void templateLiteral();
void leadingSemicolonInClass();
private:
QStringList excludedDirs;
@ -274,6 +275,15 @@ void tst_qqmlparser::templateLiteral()
QVERIFY(e);
}
void tst_qqmlparser::leadingSemicolonInClass()
{
QQmlJS::Engine engine;
QQmlJS::Lexer lexer(&engine);
lexer.setCode(QLatin1String("class X{;n(){}}"), 1);
QQmlJS::Parser parser(&engine);
QVERIFY(parser.parseProgram());
}
QTEST_MAIN(tst_qqmlparser)
#include "tst_qqmlparser.moc"