summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-08-04 22:35:42 +0300
committerAndrei Karas <akaras@inbox.ru>2015-08-04 22:35:42 +0300
commit1ee65000ea0b3d201ff1612c219e0ad8806b688a (patch)
treefc5cb9fbd15408059e351f1a7e417a397830f8bf
parente4c20844d13d4428466bb4bc3845b52c63985ca4 (diff)
downloadparanucker-1ee65000ea0b3d201ff1612c219e0ad8806b688a.tar.gz
paranucker-1ee65000ea0b3d201ff1612c219e0ad8806b688a.tar.bz2
paranucker-1ee65000ea0b3d201ff1612c219e0ad8806b688a.tar.xz
paranucker-1ee65000ea0b3d201ff1612c219e0ad8806b688a.zip
Add support for checking some global pointers.
-rw-r--r--src/analysis/expression.cpp2
-rw-r--r--src/analysis/reports.cpp3
2 files changed, 4 insertions, 1 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index e3f3816..235aa84 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -302,6 +302,7 @@ void analyseModifyExpr(ModifyExprNode *node, const WalkItem &wi, WalkItem &wo)
{
VarItem var1 = getVariableName(arg);
VarItem var2 = getVariableName(node->args[1]);
+ //Log::log("analyseModifyExpr vars: %s, %s\n", var1.name.c_str(), var2.name.c_str());
Node *arg0 = arg;
if (arg == COMPONENT_REF)
@@ -370,6 +371,7 @@ void analyseModifyExpr(ModifyExprNode *node, const WalkItem &wi, WalkItem &wo)
}
else
{
+ reportParmDeclLeftNullPointer(node, node->args[0], wi);
reportParmDeclNullPointer(node, node->args[1], wi);
}
}
diff --git a/src/analysis/reports.cpp b/src/analysis/reports.cpp
index 7e7ceb3..0f4b197 100644
--- a/src/analysis/reports.cpp
+++ b/src/analysis/reports.cpp
@@ -123,7 +123,8 @@ void reportParmDeclLeftNullPointer(Node *mainNode,
FOR_EACH (var, vars)
{
if (!var.isNonNull &&
- isIn(var.name, wi.needCheckNullVars))
+ (isIn(var.name, wi.needCheckNullVars) ||
+ isNotIn(var.name, wi.knownVars)))
{
Log::warn(findBackLocation(mainNode),
"Using field '%s' without checking for null pointer",