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:
parent
94d30df911
commit
885e4af1f4
|
@ -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;
|
||||
./
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue