diff options
author | Waqar Ahmed <waqar.17a@gmail.com> | 2021-08-10 00:53:07 +0500 |
---|---|---|
committer | Sergio Martins <smartins@kde.org> | 2021-08-10 08:37:57 +0000 |
commit | ab6b1a41ef7afaf99db6c63cd1804bad997a8795 (patch) | |
tree | 05e1632649470b44e90543d71eb7312cfd106568 | |
parent | 387df5e4879b76ee8361bbd9234ea50abec6cfea (diff) |
Fix crash if QRegularExpression() is used
-rw-r--r-- | src/checks/level0/use-static-qregularexpression.cpp | 9 | ||||
-rw-r--r-- | tests/use-static-qregularexpression/main.cpp | 7 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/checks/level0/use-static-qregularexpression.cpp b/src/checks/level0/use-static-qregularexpression.cpp index 30a2ea85..0e5c2a8f 100644 --- a/src/checks/level0/use-static-qregularexpression.cpp +++ b/src/checks/level0/use-static-qregularexpression.cpp @@ -80,8 +80,15 @@ static bool isQRegexpFromStringLiteral(VarDecl *qregexVarDecl) return false; } - auto ctorCall = dyn_cast_or_null<CXXConstructExpr>(*initExpr->child_begin()); + auto ctorCall = dyn_cast<CXXConstructExpr>(initExpr); if (!ctorCall) { + ctorCall = clazy::getFirstChildOfType<CXXConstructExpr>(initExpr); + if (!ctorCall) { + return false; + } + } + + if (ctorCall->getNumArgs() < 2) { return false; } diff --git a/tests/use-static-qregularexpression/main.cpp b/tests/use-static-qregularexpression/main.cpp index eaa63340..3f792248 100644 --- a/tests/use-static-qregularexpression/main.cpp +++ b/tests/use-static-qregularexpression/main.cpp @@ -78,3 +78,10 @@ void test2(const QStringList& regexes, QString toCheck) toCheck.contains(QRegularExpression(regix)); // Ok, no warn } } + +void test_nocrash() +{ + QRegularExpression re; + QString s; + s.contains(re); +} |