Daniel Marjamäki
bc34f0239d
Disable the subfunction value flow analysis. It does not work well and needs to be rewritten. There are false positives.
2018-12-18 14:36:49 +01:00
Paul Fultz II
34330b51d1
Fix issue 8905: Condition 'a==0' is always false
...
This fixes the FP in:
```cpp
void f(const int a[]){ if (a == 0){} }
```
2018-12-18 08:16:43 +01:00
Paul Fultz II
025881cf35
Fix issue 8829: Condition '...' is always true (int buf[42]; if(buf != NULL){})
...
This makes arrays non-null in valueflow, so it can catch comparisons against null that is always true:
```cpp
void f(void) {
int buf[42];
if( buf != 0) {;} // << always true
}
```
2018-12-17 06:07:34 +01:00
Paul Fultz II
3262a3bebe
Add isSameExpression to valueflow analysis
...
Check for same expressions in valueflow analysis.
2018-12-16 07:35:27 +01:00
Paul Fultz II
45dcfad9f9
Fix issue 8899: False positive returnDanglingLifetime when returning by value
...
This fixes the FP from:
```cpp
#include <string>
class MyString
{
public:
MyString(char* source)
{
length = strlen( source );
buffer = new char[length+1];
if( buffer )
{
strcpy( buffer, source );
}
}
char* buffer;
int length;
};
MyString Foo()
{
char arr[20];
sprintf(arr, "hello world");
return arr;
}
void main()
{
MyString str = Foo();
printf(str.buffer);
}
```
2018-12-15 17:58:45 +01:00
Daniel Marjamäki
88c61e8d1e
ValueFlow: Avoid FP when lambda is used
2018-12-04 18:54:26 +01:00
Daniel Marjamäki
f5a94ed300
ValueFlow: Fix FP when lambda is called
2018-12-04 18:46:00 +01:00
Igor
61878c5e11
Add null pointer check to fix SEGFAULT ( #1499 )
...
* Add null pointer check to fix segfault
* Add first test case to reproduce problem
2018-12-02 14:36:01 +01:00
Paul Fultz II
3e1b34dd8f
Fix FPs and crashes with byDerefCopy ( #1503 )
...
* Fix FP when inserting a range into a container
* Formatting
* Fix crash
2018-12-02 14:31:31 +01:00
Paul Fultz II
b841b818d2
Fix 8872: Crash in LifetimeStore when there is no scope for variable
...
This fixes crash in:
```cpp
struct edit_line_paste_over {
void operator()(agi::Context *c) override {
paste_lines(c, true, [&](AssDialogue *new_line) -> AssDialogue * {
AssDialogue *ret = paste_over(c->parent, pasteOverOptions, new_line, static_cast<AssDialogue*>(&*pos));
return ret;
});
}
};
```
2018-12-01 19:11:26 +01:00
Paul Fultz II
67dd822910
Fix FP in lifetime anlaysis: Dont decay std array
...
This will fix FP with:
```cpp
std::array<char, 1> f() {
std::array<char, 1> x;
return x;
}
```
2018-12-01 19:09:19 +01:00
Daniel Marjamäki
0ad757fc78
valueFlowLifetime: Try to cleanup the loop a little. No functional change is intended.
2018-11-27 06:43:59 +01:00
Paul Fultz II
5a6f9ac82a
Fix FP with strcmp and terminating conditions
2018-11-27 06:39:29 +01:00
Daniel Marjamäki
2887ee10c0
Fixed #8800 (Possible variable assignment ignored in boolean expression)
2018-11-26 14:00:03 +01:00
Paul Fultz II
a3921ea861
Refactor valueFlowAfterCondition
...
So this unifies the `valueFlowAfterCondition` so it re-uses more code between checking for integers and container sizes. This should make valueFlowContainer more robust.
It also extends valueflow to support container comparisons such as `if (v.size() < 3)` or `if (v.size() > 3)` using the same mechanism that is used for integers.
2018-11-24 10:07:12 +01:00
Daniel Marjamäki
52f9650533
Refactoring: Use visitAstNodes
2018-11-23 19:16:19 +01:00
Daniel Marjamäki
745b58de26
Refactoring: Use visitAstNodes
2018-11-23 17:18:07 +01:00
Paul Fultz II
f16d9d7d90
Issue 6175: Check lifetime of a variables stored in containers and member variables
...
Cppcheck will now warn for all cases here:
```cpp
#include <vector>
class CCluster {};
class MyClass
{ public:
std::vector<CCluster*> m_cluster;
void createCluster()
{
CCluster cl;
CCluster* pcl=&cl;
m_cluster.push_back(pcl);
}
void createCluster2()
{
CCluster cl;
m_cluster.push_back(&cl);
}
CCluster* Cluster()
{
CCluster cl;
CCluster* pcl=&cl;
return pcl;
}
CCluster* Cluster2()
{
CCluster cl;
return &cl;
}
};
```
2018-11-21 08:43:57 +01:00
Daniel Marjamäki
9d8e5e36eb
Added a few TODO comments
2018-11-20 22:57:01 +01:00
Paul Fultz II
7ef119cbfc
Fix FPs in lifetime checker
...
This fixes several FPs in the lifetime checker. It also fixes issue [8846](https://trac.cppcheck.net/ticket/8846 ):
```cpp
int * f(int a[])
{
return a;
}
```
2018-11-17 09:41:59 +01:00
Paul Fultz II
d376e9f245
Track variable lifetime through function calls ( #1481 )
2018-11-16 06:12:28 +01:00
Daniel Marjamäki
39c04b650d
astyle formatting
...
[ci skip]
2018-11-14 19:10:52 +01:00
Paul Fultz II
54453c5802
Fix FP when copying pointer to string ( #1479 )
2018-11-14 06:59:25 +01:00
Paul Fultz II
f0c86b9d14
Fix issue 8842: Crash in valueFlowTerminatingCondition on incomplete code ( #1480 )
2018-11-14 06:23:45 +01:00
Daniel Marjamäki
f096d7f474
astyle formatting
...
[ci skip]
2018-11-12 10:08:57 +01:00
Paul Fultz II
0e11bb07c8
Extend lifetime analysis to pointer usage ( #1477 )
...
* Use lifetime analysis for pointers as well
* Fix issue 1143: Pointer to local array
* Update message when using pointers
* Avoid infinite loop in tracing lifetimes
2018-11-12 10:08:17 +01:00
Daniel Marjamäki
717a2d370c
astyle formatting
...
[ci skip]
2018-11-12 06:32:02 +01:00
Paul Fultz II
5bda102897
Fix warnings ( #1476 )
2018-11-12 06:08:57 +01:00
Paul Fultz II
68d6b96878
Diagnose invalid lifetimes ( #1475 )
...
* Add check for invalid lifetimes
* Fix FP with member variables
* Dont forward lifetime values in subfunction
* Update message to use out of scope
2018-11-11 16:43:54 +01:00
Daniel Marjamäki
bdd4623124
valueFlowLibraryFunction: fix crash found with daca@home
2018-11-11 16:41:01 +01:00
Paul Fultz II
e46691597e
Fix issue 8841: FP knownConditionTrueFalse - Dont treat unknown function as noreturn ( #1474 )
...
* Fix issue 8841: Dont treat unknown function as noreturn
* Add a parameter to set default value when the function is unknown
2018-11-11 08:04:01 +01:00
Daniel Marjamäki
d5a478d5c5
astyle formatting
...
[ci skip]
2018-11-10 21:30:01 +01:00
Paul Fultz II
1ffcc6b730
Add initial lifetime checker ( #1448 )
...
* Inital valueflow lifetime checker
* Forward values
* Add initial tests
* Fix deplicate messages
* Fix traversing nested lambdas
* Turn test case into a todo
* Skip if returning a container
* Fix FP when using references
* Add missing header
* Fix FP from broken scopes
* Fix FP with static variable
* Add test for more FPs
* Parse lambda functions
* Check for capture by value
* Add tests for using a container and lambda together
* Fix cppcheck errors
* Add test for nextAfterAstRightmostLeaf
* Add valueflow tests
* Update error message
* Check for correct lambda token
* Improve error path reporting
* Fix hang when parsing arrays that look almlost like lambdas
2018-11-10 16:40:40 +01:00
Paul Fultz II
36e663e250
Fix issue 8839: FP knownConditionTrueFalse - condition inside a while-clause ( #1469 )
2018-11-09 06:09:51 +01:00
Paul Fultz II
7373be2bfa
Add a pass in valueflow for terminating conditions ( #1323 )
...
* Add valueflow for terminating conditions
* Add valueflow test
* Dont check for same expressions for now to avoid double diagnostics
* Check nesting
* Add more tests
* Ensure conditions happen in order
* Check for null
* Add error path
* Support same expression check as well
* Use early continue
* Skip checking the same token
* Avoid double condtion diagnosis
* Fix FP when in switch statements
* Fix FP when time function
* Skip conditional escapes
* Use simpleMatch
* Fix naming
* Fix typo
2018-11-07 06:49:07 +01:00
Daniel Marjamäki
35d18be311
ValueFlow: Refactoring, removed redundant assignment
2018-11-06 07:02:20 +01:00
Daniel Marjamäki
00340efc57
ValueFlow: Refactoring valueFlowCallFunction
2018-11-06 06:38:26 +01:00
Daniel Marjamäki
ca19894a04
ValueFlow: In evaluate handle correlated values
2018-11-05 18:07:35 +01:00
Daniel Marjamäki
da44ce0b5d
ValueFlow: evaluate strlen and char literals better
2018-11-05 16:52:12 +01:00
Daniel Marjamäki
977fdd88a9
ValueFlow: Fix a few issues in 'evaluate'
2018-11-05 06:53:48 +01:00
Daniel Marjamäki
8a54420274
ValueFlow: Try to handle multiple argument values in <returnValue> evaluation
2018-11-04 20:52:12 +01:00
Daniel Marjamäki
dd9a1e890b
valueFlowRightShift: Do not perform analysis when rhs is negative
2018-11-04 17:13:23 +01:00
Daniel Marjamäki
6878de2c5e
ValueFlow: getExpressionRange, valueFlowRightShift
2018-11-03 23:25:46 +01:00
Daniel Marjamäki
ef35b86b4a
Multipass Valueflow
2018-11-03 15:53:24 +01:00
Daniel Marjamäki
614a252704
Fix Match warning
2018-11-02 20:14:34 +01:00
Daniel Marjamäki
5de683ec49
Container size: Fix false positive
2018-11-02 20:10:40 +01:00
Daniel Marjamäki
16cc20a232
ValueFlow: Better handling of container size values
2018-11-02 18:28:32 +01:00
Daniel Marjamäki
c03d32b429
ValueFlow: Improve containerSize handling of string like classes
2018-10-28 19:14:00 +01:00
Daniel Marjamäki
06ede9c239
ValueFlow: handle x+=y for containers
2018-10-27 18:38:04 +02:00
Paul Fultz II
16c62281d0
Use followVar in checking duplicateBranch ( #1423 )
...
* Use isSameExpression for duplicate branches
* Add errorPath
* Add another test
2018-10-18 11:56:23 +02:00