diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/analysis.cpp | 3 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 20 | ||||
-rw-r--r-- | src/analysis/expression.h | 3 |
3 files changed, 26 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index 6300992..d58e296 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -28,6 +28,7 @@ #include "nodes/decl/function_decl.h" #include "nodes/expr/modify_expr.h" +#include "nodes/expr/pointerplus_expr.h" #include "localconsts.h" @@ -71,6 +72,8 @@ WalkItem analyseNode(Node *node, WalkItem wi) return analyseFunction(static_cast<FunctionDeclNode*>(node), wi); case MODIFY_EXPR: return analyseModifyExpr(static_cast<ModifyExprNode*>(node), wi); + case POINTER_PLUS_EXPR: + return analysePointerPlusExpr(static_cast<PointerPlusExprNode*>(node), wi); default: break; } diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 114208c..81deae1 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -27,6 +27,7 @@ #include "nodes/expr/indirect_ref.h" #include "nodes/expr/modify_expr.h" +#include "nodes/expr/pointerplus_expr.h" #include <set> @@ -62,4 +63,23 @@ WalkItem analyseModifyExpr(ModifyExprNode *node, WalkItem wi) return wi; } +WalkItem analysePointerPlusExpr(PointerPlusExprNode *node, WalkItem wi) +{ + // need atleast one arg for check + if (node->args.empty() || command == FindArgs) + return wi; + + Node *arg = node->args[0]; + if (arg->nodeType == PARM_DECL) + { + if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end()) + { + Log::warn(findBackLocation(node), + "Using variable without check for NULL"); + } + } + + return wi; +} + } diff --git a/src/analysis/expression.h b/src/analysis/expression.h index b32e099..abba68b 100644 --- a/src/analysis/expression.h +++ b/src/analysis/expression.h @@ -23,11 +23,14 @@ #include "includes.h" struct ModifyExprNode; +struct PointerPlusExprNode; struct WalkItem; namespace Analysis { WalkItem analyseModifyExpr(ModifyExprNode *node, WalkItem wi); + + WalkItem analysePointerPlusExpr(PointerPlusExprNode *node, WalkItem wi); } #endif // ANALYSIS_EXPRESSION_H |