From 0115abd5dc7cc43a6e84c21bab03324fd37a5f32 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 24 Jun 2015 02:00:45 +0300 Subject: Check only first function parameter and only if this is not FUNCTION_DECL. --- src/analysis/expression.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/analysis') diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 28e7bb8..78b3d8e 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -385,13 +385,32 @@ void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo) walkTree(node->chain, wi, wo2); Log::dumpWI(node, "wo chain ", wo2); wo2 = wo; - walkTree(node->function, wi, wo2); - Log::dumpWI(node, "wo function ", wo2); + bool enableCheck(true); + if (node->function) + { + walkTree(node->function, wi, wo2); + Log::dumpWI(node, "wo function ", wo2); + if (node->function->nodeType == ADDR_EXPR) + { + AddrExprNode *addrNode = static_cast(node->function); + if (!addrNode->args.empty()) + { + if (addrNode->args[0]->nodeType == FUNCTION_TYPE) + { + enableCheck = false; + } + } + } + } FOR_EACH (std::vector::const_iterator, it, node->args) { wo2 = wo; Node *node2 = skipNop(*it); - reportParmDeclNullPointer(node, node2, wi); + if (enableCheck) + { + reportParmDeclNullPointer(node, node2, wi); + enableCheck = false; + } walkTree(node2, wi, wo2); Log::dumpWI(node, "wo arg ", wo2); } -- cgit v1.2.3-60-g2f50