aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWaqar Ahmed <waqar.17a@gmail.com>2021-08-10 00:53:07 +0500
committerSergio Martins <smartins@kde.org>2021-08-10 08:37:57 +0000
commitab6b1a41ef7afaf99db6c63cd1804bad997a8795 (patch)
tree05e1632649470b44e90543d71eb7312cfd106568
parent387df5e4879b76ee8361bbd9234ea50abec6cfea (diff)
Fix crash if QRegularExpression() is used
-rw-r--r--src/checks/level0/use-static-qregularexpression.cpp9
-rw-r--r--tests/use-static-qregularexpression/main.cpp7
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);
+}