diff options
author | Waqar Ahmed <waqar.17a@gmail.com> | 2021-08-16 13:02:15 +0500 |
---|---|---|
committer | Waqar Ahmed <waqar.17a@gmail.com> | 2021-08-16 13:02:15 +0500 |
commit | d9b44927e61f0ecf239ed0374860962b3328cb58 (patch) | |
tree | adfaf0d580a9fd4361e3f6a80ecc2d74ff735a23 | |
parent | 606878a3657e90c3b4809edec4241dac19dbba88 (diff) |
Fix crash with QVariant::toRegularExpression()
-rw-r--r-- | src/checks/level0/use-static-qregularexpression.cpp | 10 | ||||
-rw-r--r-- | tests/use-static-qregularexpression/main.cpp | 4 | ||||
-rw-r--r-- | tests/use-static-qregularexpression/main.cpp.expected | 4 |
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] |