aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWaqar Ahmed <waqar.17a@gmail.com>2021-08-16 13:02:15 +0500
committerWaqar Ahmed <waqar.17a@gmail.com>2021-08-16 13:02:15 +0500
commitd9b44927e61f0ecf239ed0374860962b3328cb58 (patch)
treeadfaf0d580a9fd4361e3f6a80ecc2d74ff735a23
parent606878a3657e90c3b4809edec4241dac19dbba88 (diff)
Fix crash with QVariant::toRegularExpression()
-rw-r--r--src/checks/level0/use-static-qregularexpression.cpp10
-rw-r--r--tests/use-static-qregularexpression/main.cpp4
-rw-r--r--tests/use-static-qregularexpression/main.cpp.expected4
3 files changed, 11 insertions, 7 deletions
diff --git a/src/checks/level0/use-static-qregularexpression.cpp b/src/checks/level0/use-static-qregularexpression.cpp
index 74ddd402..0f2aed83 100644
--- a/src/checks/level0/use-static-qregularexpression.cpp
+++ b/src/checks/level0/use-static-qregularexpression.cpp
@@ -50,7 +50,7 @@ static VarDecl* getVarDecl(Expr *arg)
declRefExpr =
declRefExpr ? declRefExpr : clazy::getFirstChildOfType<DeclRefExpr>(arg);
if (!declRefExpr) {
- return nullptr;
+ return nullptr;
}
return dyn_cast_or_null<VarDecl>(declRefExpr->getDecl());
}
@@ -78,18 +78,18 @@ static bool isQStringFromStringLiteral(Expr *qstring)
static bool isTemporaryQRegexObj(Expr *qregexVar, const LangOptions &lo) {
// Get the QRegularExpression ctor
auto ctor = clazy::getFirstChildOfType<CXXConstructExpr>(qregexVar);
- if (ctor->getNumArgs() == 0) {
- return false;
+ if (!ctor || ctor->getNumArgs() == 0) {
+ return false;
}
// Check if its first arg is "QString" && a temporary OR non-static local
auto qstrArg = ctor->getArg(0);
if (!qstrArg || clazy::typeName(qstrArg->getType(), lo, true) != "QString") {
- return false;
+ return false;
}
if (isQStringFromStringLiteral(qstrArg)) {
- return true;
+ return true;
}
return false;
}
diff --git a/tests/use-static-qregularexpression/main.cpp b/tests/use-static-qregularexpression/main.cpp
index 58d67590..a1a18916 100644
--- a/tests/use-static-qregularexpression/main.cpp
+++ b/tests/use-static-qregularexpression/main.cpp
@@ -86,6 +86,7 @@ void test_nocrash()
s.contains(re);
}
+#include <QtCore/QVariant>
void test_qregexmatch(QString selectedText)
{
QRegularExpression weekRE("(?<week>");
@@ -94,4 +95,7 @@ void test_qregexmatch(QString selectedText)
auto m1 = QRegularExpression("[123]").match(selectedText);
auto m2 = QRegularExpression("[123]").globalMatch(selectedText);
+
+ QVariant v;
+ v.toRegularExpression().match(selectedText); // No Warn
}
diff --git a/tests/use-static-qregularexpression/main.cpp.expected b/tests/use-static-qregularexpression/main.cpp.expected
index 8951d826..02736b28 100644
--- a/tests/use-static-qregularexpression/main.cpp.expected
+++ b/tests/use-static-qregularexpression/main.cpp.expected
@@ -19,7 +19,7 @@ use-static-qregularexpression/main.cpp:50:21: warning: Don't create temporary QR
use-static-qregularexpression/main.cpp:53:25: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
use-static-qregularexpression/main.cpp:57:16: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
use-static-qregularexpression/main.cpp:61:20: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
-use-static-qregularexpression/main.cpp:92:19: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
use-static-qregularexpression/main.cpp:93:19: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
-use-static-qregularexpression/main.cpp:95:15: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
+use-static-qregularexpression/main.cpp:94:19: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
use-static-qregularexpression/main.cpp:96:15: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]
+use-static-qregularexpression/main.cpp:97:15: warning: Don't create temporary QRegularExpression objects. Use a static QRegularExpression object instead [-Wclazy-use-static-qregularexpression]