diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-10 21:53:03 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-10 21:53:03 +0300 |
commit | 11aec81a67f885955cd47d633e1940e144db4433 (patch) | |
tree | 09d5a5a43f530937180b9a136b99f9e01e78d996 /src | |
parent | 45700a08edd0aa34dff01a40ee155a5145fa57f1 (diff) | |
download | paranucker-11aec81a67f885955cd47d633e1940e144db4433.tar.gz paranucker-11aec81a67f885955cd47d633e1940e144db4433.tar.bz2 paranucker-11aec81a67f885955cd47d633e1940e144db4433.tar.xz paranucker-11aec81a67f885955cd47d633e1940e144db4433.zip |
Fix false positive like this: ptr = ptr->val;
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/expression.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 683623a..54d73c2 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -152,20 +152,25 @@ void analyseModifyExpr(ModifyExprNode *node, const WalkItem &wi, WalkItem &wo) if (arg == INDIRECT_REF) { // var2 not found in known checking pointer + reportParmDeclNullPointer(node, + static_cast<IndirectRefNode*>(arg)->ref, + wi); + if (isNotIn(var2, wi.needCheckNullVars) && isNotIn(var2, wi.knownVars)) { removeVar(wo, var1); } - - reportParmDeclNullPointer(node, - static_cast<IndirectRefNode*>(arg)->ref, - wi); } else if (!var1.empty()) { if (var2.empty()) { // have var1 only (var1 = UNKNOWN or var1 = function(...)) + + walkTree(arg, wi, wo); + walkTree(node->args[1], wi, wo); + wo.stopWalking = true; + bool handled(false); if (node->args[1] == CALL_EXPR && isPointerArg(arg)) { |