Cppcheck
|
Check that uninitialized variables aren't used (using ExecutionPath) More...
Static Public Member Functions | |
UninitVar (Check *c, const SymbolDatabase *db, const Library *lib, bool isc) | |
Startup constructor. | |
static void | analyseFunctions (const Token *const tokens, std::set< std::string > &func) |
![]() | |
static void | bailOut (std::list< ExecutionPath * > &checks) |
bail out all execution paths | |
static void | bailOutVar (std::list< ExecutionPath * > &checks, const unsigned int varid) |
bail out execution paths with given variable id | |
static void | checkScope (const Token *tok, std::list< ExecutionPath * > &checks) |
Private Member Functions | |
ExecutionPath * | copy () |
Create a copy of this check. | |
UninitVar (Check *c, const Variable *v, const SymbolDatabase *db, const Library *lib, bool isc) | |
internal constructor for creating extra checks | |
bool | is_equal (const ExecutionPath *e) const |
is other execution path equal? | |
const Token * | parse (const Token &tok, std::list< ExecutionPath * > &checks) const |
parse tokens. | |
bool | parseCondition (const Token &tok, std::list< ExecutionPath * > &checks) |
void | parseLoopBody (const Token *tok, std::list< ExecutionPath * > &checks) const |
Static Private Member Functions | |
static void | alloc_pointer (std::list< ExecutionPath * > &checks, unsigned int varid) |
allocating pointer. | |
static void | init_pointer (std::list< ExecutionPath * > &checks, const Token *tok) |
Initializing a pointer value. | |
static void | dealloc_pointer (std::list< ExecutionPath * > &checks, const Token *tok) |
Deallocate a pointer. | |
static void | pointer_assignment (std::list< ExecutionPath * > &checks, const Token *tok1, const Token *tok2) |
Pointer assignment: p = x; if p is a pointer and x is an array/pointer then bail out. | |
static void | init_strncpy (std::list< ExecutionPath * > &checks, const Token *tok) |
Initialize an array with strncpy. | |
static void | init_memset_nonzero (std::list< ExecutionPath * > &checks, const Token *tok) |
Initialize an array with memset (not zero). | |
static bool | use (std::list< ExecutionPath * > &checks, const Token *tok, const int mode) |
use - called from the use* functions below. | |
static bool | use (std::list< ExecutionPath * > &checks, const Token *tok) |
Reading variable. | |
static void | use_array (std::list< ExecutionPath * > &checks, const Token *tok) |
Reading array elements. | |
static void | use_array_mem (std::list< ExecutionPath * > &checks, const Token *tok) |
Reading array elements with a "mem.." function. | |
static bool | use_pointer (std::list< ExecutionPath * > &checks, const Token *tok) |
Bad pointer usage. | |
static bool | use_dead_pointer (std::list< ExecutionPath * > &checks, const Token *tok) |
Using variable. | |
static bool | use_array_or_pointer_data (std::list< ExecutionPath * > &checks, const Token *tok) |
Using variable. | |
static void | parserhs (const Token *tok2, std::list< ExecutionPath * > &checks) |
Parse right hand side expression in statement. |
Private Attributes | |
const SymbolDatabase * | symbolDatabase |
pointer to symbol database | |
const Library * | library |
pointer to library | |
const bool | isC |
const Variable * | var |
variable for this check | |
bool | alloc |
is this variable allocated? | |
bool | strncpy_ |
is this variable initialized with strncpy (not always zero-terminated) | |
bool | memset_nonzero |
is this variable initialized but not zero-terminated (memset) |
Additional Inherited Members | |
![]() | |
ExecutionPath (Check *c, unsigned int id) | |
virtual | ~ExecutionPath () |
virtual ExecutionPath * | copy ()=0 |
Implement this in each derived class. | |
void | print () const |
print checkdata | |
virtual const Token * | parse (const Token &tok, std::list< ExecutionPath * > &checks) const =0 |
Parse tokens at given location. | |
virtual bool | parseCondition (const Token &tok, std::list< ExecutionPath * > &checks) |
Parse condition. | |
virtual void | parseLoopBody (const Token *tok, std::list< ExecutionPath * > &checks) const |
Parse loop body. | |
virtual void | end (const std::list< ExecutionPath * > &, const Token *) const |
going out of scope - all execution paths end | |
bool | operator== (const ExecutionPath &e) const |
![]() | |
unsigned int | numberOfIf |
number of if blocks | |
const unsigned int | varId |
![]() | |
virtual bool | is_equal (const ExecutionPath *) const =0 |
Are two execution paths equal? | |
![]() | |
Check *const | owner |
Check that uninitialized variables aren't used (using ExecutionPath)
Definition at line 55 of file checkuninitvar.cpp.
|
inlineexplicitstatic |
Startup constructor.
Definition at line 58 of file checkuninitvar.cpp.
|
inlineprivate |
internal constructor for creating extra checks
Definition at line 69 of file checkuninitvar.cpp.
|
inlinestaticprivate |
allocating pointer.
For example : p = malloc(10);
Definition at line 100 of file checkuninitvar.cpp.
References alloc, ExecutionPath::bailOutVar(), Variable::isArray(), Variable::isPointer(), var, and ExecutionPath::varId.
Referenced by parse().
|
inlinestatic |
Definition at line 923 of file checkuninitvar.cpp.
References Token::eIncDecOp, Token::isName(), Token::isStandardType(), Token::link(), Token::Match(), Token::next(), Token::str(), Token::tokAt(), and Token::varId().
|
inlineprivate |
Create a copy of this check.
Definition at line 64 of file checkuninitvar.cpp.
References UninitVar().
|
inlinestaticprivate |
Deallocate a pointer.
For example: free(p);
Definition at line 142 of file checkuninitvar.cpp.
References alloc, Variable::isArray(), Variable::isPointer(), Variable::name(), ExecutionPath::owner, CheckUninitVar::uninitvarError(), var, ExecutionPath::varId, and Token::varId().
Referenced by parse().
|
inlinestaticprivate |
Initialize an array with memset (not zero).
Definition at line 222 of file checkuninitvar.cpp.
References memset_nonzero, ExecutionPath::varId, and Token::varId().
Referenced by parse().
|
inlinestaticprivate |
Initializing a pointer value.
For example: *p = 0;
Definition at line 117 of file checkuninitvar.cpp.
References alloc, Variable::isArray(), use_pointer(), var, ExecutionPath::varId, and Token::varId().
Referenced by parse().
|
inlinestaticprivate |
Initialize an array with strncpy.
Definition at line 207 of file checkuninitvar.cpp.
References strncpy_, ExecutionPath::varId, and Token::varId().
Referenced by parse().
|
inlineprivate |
is other execution path equal?
Definition at line 74 of file checkuninitvar.cpp.
References alloc, memset_nonzero, strncpy_, and var.
|
inlineprivate |
parse tokens.
Definition at line 410 of file checkuninitvar.cpp.
References alloc, alloc_pointer(), ExecutionPath::bailOut(), ExecutionPath::bailOutVar(), dealloc_pointer(), Token::eIncDecOp, Token::function(), Token::getStrLength(), init_memset_nonzero(), init_pointer(), init_strncpy(), Variable::isArray(), Token::isAssignmentOp(), isC, Variable::isExtern(), Token::isName(), Variable::isPointer(), Token::isStandardType(), Variable::isStatic(), Token::isUpperCaseName(), library, Token::link(), Token::linkAt(), Token::Match(), Variable::name(), Variable::nameToken(), Scope::nestedIn, Token::next(), ExecutionPath::owner, CheckNullPointer::parseFunctionCall(), parserhs(), pointer_assignment(), Token::previous(), Library::returnuninitdata, Variable::scope(), Token::simpleMatch(), Token::str(), Token::strAt(), symbolDatabase, Token::tokAt(), MathLib::toLongNumber(), Token::type(), Variable::typeEndToken(), Variable::typeStartToken(), UninitVar(), use(), use_array(), use_array_mem(), use_array_or_pointer_data(), use_dead_pointer(), use_pointer(), var, Token::variable(), ExecutionPath::varId, Token::varId(), and Scope::varlist.
Referenced by parseLoopBody().
|
inlineprivate |
Definition at line 876 of file checkuninitvar.cpp.
References library, Token::Match(), Token::next(), CheckNullPointer::parseFunctionCall(), Token::simpleMatch(), skipBrackets(), Token::str(), use(), use_array(), use_array_mem(), use_array_or_pointer_data(), and Token::varId().
|
inlineprivate |
Definition at line 904 of file checkuninitvar.cpp.
References ExecutionPath::bailOutVar(), Token::linkAt(), Token::next(), parse(), Token::simpleMatch(), Token::str(), and Token::tokAt().
|
inlinestaticprivate |
Parse right hand side expression in statement.
tok2 | start token of rhs |
checks | the execution paths |
Definition at line 367 of file checkuninitvar.cpp.
References ExecutionPath::bailOutVar(), Token::link(), Token::linkAt(), Token::Match(), Token::next(), Token::previous(), Token::simpleMatch(), Token::str(), Token::strAt(), Token::tokAt(), use(), use_array_or_pointer_data(), and Token::varId().
Referenced by parse().
|
inlinestaticprivate |
Pointer assignment: p = x; if p is a pointer and x is an array/pointer then bail out.
checks | all available checks |
tok1 | the "p" token |
tok2 | the "x" token |
Definition at line 173 of file checkuninitvar.cpp.
References ExecutionPath::bailOutVar(), Variable::isArray(), Variable::isPointer(), var, ExecutionPath::varId, and Token::varId().
Referenced by parse().
|
inlinestaticprivate |
use - called from the use* functions below.
checks | all available checks |
tok | variable token |
mode | specific behaviour |
Definition at line 245 of file checkuninitvar.cpp.
References alloc, Variable::isArray(), Variable::isPointer(), Token::Match(), memset_nonzero, Variable::name(), Token::next(), ExecutionPath::owner, strncpy_, Variable::typeStartToken(), CheckUninitVar::uninitdataError(), CheckUninitVar::uninitstringError(), CheckUninitVar::uninitvarError(), var, ExecutionPath::varId, and Token::varId().
Referenced by parse(), parseCondition(), parserhs(), use(), use_array(), use_array_mem(), use_array_or_pointer_data(), use_dead_pointer(), and use_pointer().
|
inlinestaticprivate |
Reading variable.
Use this function in situations when it is invalid to read the data of the variable but not the address.
checks | all available checks |
tok | variable token |
Definition at line 309 of file checkuninitvar.cpp.
References use().
|
inlinestaticprivate |
Reading array elements.
If the variable is not an array then the usage is ok.
checks | all available checks |
tok | variable token |
Definition at line 318 of file checkuninitvar.cpp.
References use().
Referenced by parse(), and parseCondition().
|
inlinestaticprivate |
Reading array elements with a "mem.." function.
It's ok if the array is not null-terminated.
checks | all available checks |
tok | variable token |
Definition at line 327 of file checkuninitvar.cpp.
References use().
Referenced by parse(), and parseCondition().
|
inlinestaticprivate |
Using variable.
. reading from uninitialized array or pointer data is invalid. Example: = x[0];
checks | all available checks |
tok | variable token |
Definition at line 358 of file checkuninitvar.cpp.
References use().
Referenced by parse(), parseCondition(), and parserhs().
|
inlinestaticprivate |
Using variable.
. if it's a dead pointer the usage is invalid.
checks | all available checks |
tok | variable token |
Definition at line 347 of file checkuninitvar.cpp.
References use().
Referenced by parse().
|
inlinestaticprivate |
Bad pointer usage.
If the variable is not a pointer then the usage is ok.
checks | all available checks |
tok | variable token |
Definition at line 337 of file checkuninitvar.cpp.
References use().
Referenced by init_pointer(), and parse().
|
private |
is this variable allocated?
Definition at line 91 of file checkuninitvar.cpp.
Referenced by alloc_pointer(), dealloc_pointer(), init_pointer(), is_equal(), parse(), and use().
|
private |
Definition at line 85 of file checkuninitvar.cpp.
Referenced by parse().
|
private |
pointer to library
Definition at line 83 of file checkuninitvar.cpp.
Referenced by parse(), and parseCondition().
|
private |
is this variable initialized but not zero-terminated (memset)
Definition at line 97 of file checkuninitvar.cpp.
Referenced by init_memset_nonzero(), is_equal(), and use().
|
private |
is this variable initialized with strncpy (not always zero-terminated)
Definition at line 94 of file checkuninitvar.cpp.
Referenced by init_strncpy(), is_equal(), and use().
|
private |
|
private |
variable for this check
Definition at line 88 of file checkuninitvar.cpp.
Referenced by alloc_pointer(), dealloc_pointer(), init_pointer(), is_equal(), parse(), pointer_assignment(), and use().