159 Commits

Author SHA1 Message Date
Paul Fultz II
e4677ae640 Fix issue 8910: Regression: ValueFlow: wrong conditional tokvalue
This fixes issue in:

```cpp
void f()
{
    char stack[512];
    RGNDATA *data;

    if (data_size > sizeof (stack))
        data = malloc (data_size);
    else
        data = (RGNDATA *)stack;

    if ((char *)data != stack)
            free (data); // <- data is not stack
}
```

It seems the `ProgramMemory` can't handle two known values(such as int and tok) together. So instead `ValueFlowAfterAssign` runs `ValueFlowForward` with tok values and then runs it with the other values.
2018-12-29 09:31:21 +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
Paul Fultz II
3e1b34dd8f Fix FPs and crashes with byDerefCopy ()
* Fix FP when inserting a range into a container

* Formatting

* Fix crash
2018-12-02 14:31:31 +01:00
Daniel Marjamäki
ccbaad32f9 Fix merge conflicts 2018-12-01 19:14:43 +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
Paul Fultz II
229c45e7f8 Fix issue 8865: FP with dangling lifetime
This fixes:

```cpp
void f(uint32_t event, unsigned long op, const xen_ulong_t *args)
{
    struct __packed {
        uint32_t op;
        uint32_t args[6];
    } d;
    uint32_t *a = d.args;
}
```
2018-12-01 19:07:46 +01:00
Daniel Marjamäki
f42648fe22 Fixed (false positive: Address of local auto-variable assigned to a function parameter.) 2018-12-01 10:11:02 +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
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 () 2018-11-16 06:12:28 +01:00
Paul Fultz II
54453c5802 Fix FP when copying pointer to string () 2018-11-14 06:59:25 +01:00
Paul Fultz II
0e11bb07c8 Extend lifetime analysis to pointer usage ()
* 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
Paul Fultz II
68d6b96878 Diagnose invalid lifetimes ()
* 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
ee2dfb6604 Fixed (False positive returnAddressOfAutoVariable within lambda) 2018-11-11 07:52:38 +01:00
Paul Fultz II
1ffcc6b730 Add initial lifetime checker ()
* 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
Daniel Marjamäki
66ca03fa0c Fixed (false negative: Invalid memory address freed) 2018-11-03 18:55:20 +01:00
Paul Fultz II
fa40b821e6 Fix issue 8740: Add a pass to check for valid operators () 2018-09-08 21:10:34 +02:00
Daniel Marjamäki
43233e72b2 Fixed (False negative for uselessAssignmentArg) 2018-08-17 19:56:36 +02:00
Daniel Marjamäki
cde63c7573 Use Variable::valueType instead of Variable::typeStartToken in auto variables 2018-06-24 08:25:19 +02:00
IOBYTE
ce50df8047 Fix override warnings. () 2018-05-15 16:37:40 +02:00
Daniel Marjamäki
7e4dba6a7e Updated copyright year 2018-03-31 20:59:09 +02:00
Daniel Marjamäki
c110770481 Fixed (False negative: address of auto variable being returned when assigned to another variable first) 2018-01-27 14:48:45 +01:00
Daniel Marjamäki
cb297a00fc Auto variables: Assign address of local variable to global pointer () 2018-01-25 22:50:41 +01:00
Daniel Marjamäki
599e038282 AutoVariables: Warn when address of local array is assigned to global pointer and pointer is not reassigned 2018-01-24 21:33:58 +01:00
Daniel Marjamäki
c4caee6b18 Updated copyright year 2018-01-14 15:37:52 +01:00
Ayaz Salikhov
28aa939d69 iwyu - include what you use 2017-05-27 04:33:47 +02:00
Daniel Marjamäki
f68fa72095 Fixed (Defect: False positive '(error) Reference to temporary returned') 2017-02-26 13:41:49 +01:00
PKEuS
ea53bd22b7 Fixed false positive returnTempReference with operator++ () 2016-12-22 11:49:59 +01:00
Daniel Marjamäki
aaf19c1e4f Fixed (Prefix increment triggers parameter modification warning) 2016-12-19 15:25:36 +01:00
PKEuS
1715969f6f Support prefix-increment/decrement in CheckAutoVariables::assignFunctionArg() () 2016-10-10 21:34:40 +02:00
Alexander Mai
d492500f34 False positive: returnReference fp for inner lambda function 2016-05-20 23:46:56 +02:00
PKEuS
23ad881c64 Fixed false positive returnLocalVariable () 2016-01-30 20:18:12 +01:00
Lauri Nurmi
996c9244d8 Update copyright year to 2007-2016. 2016-01-01 15:34:45 +02:00
Alexander Mai
ba0859e838 crash in checkvaarg.cpp (with possible fix). Avoid segfault. Add SymbolDatabase::validate() to allow validating smyboldatabase 2015-12-05 20:55:26 +01:00
Daniel Marjamäki
0f9d90d2be Changed Copyrights. Removed my name. 2015-11-18 20:04:50 +01:00
Daniel Marjamäki
71bf0f076f CheckAutoVariables: Handle 'x-y' better in isAutoVarArray 2015-11-15 19:34:36 +01:00
Daniel Marjamäki
4e578af603 CheckAutoVar: Improved usage of AST and ValueFlow 2015-11-15 14:48:13 +01:00
Daniel Marjamäki
c10a10c26f CheckAutoVariables: use ValueFlow to detect more errors when pointer aliases are used 2015-11-15 12:10:35 +01:00
PKEuS
a8cf63239a Fixed false positive autovarInvalidDeallocation if deallocting result of member function () 2015-11-11 16:59:31 +01:00
PKEuS
f1bbcfe32d Refactorization: Avoid loading std.cfg multiple times in testautovariables.cpp 2015-10-07 14:40:09 +02:00
Simon Martin
59abb04042 Ticket : Address of local variables can also be assigned to pointer-pointer arguments using the ptr[] syntax. 2015-08-28 20:29:51 +02:00
PKEuS
7bb79562e9 Skip inner classes in CheckAutoVariables::returnReference() () 2015-08-26 13:31:51 +02:00
Simon Martin
6fb19b02d0 Properly differentiate arrays of pointers and pointers to arrays. 2015-08-25 21:19:19 +02:00
PKEuS
a297a03b64 Fixed false positive : Skip over lambdas in CheckAutoVariables::returnReference() 2015-08-14 13:03:07 +02:00
Daniel Marjamäki
9627fccdc5 assignFunctionArg: don't warn when there is self assignment. There is a separate warning for self assignments. 2015-08-09 14:51:23 +02:00
PKEuS
176b3925b3 Removed "verify" code in testrunner. Fixing its messages reduces the accuracy of the test suite. 2015-07-25 14:18:41 +02:00
Simon Martin
7481fbb028 Fixed (Properly detect calls to the deallocating free() function) 2015-06-20 21:00:54 +02:00
PKEuS
42673255ed Refactorized testrunner: Create std::string only where necessary 2015-03-15 12:36:40 +01:00
PKEuS
bc5132e0ac Refactorization: Moved declaration of errout, ... to testsuite.h, uniformized style 2015-03-11 22:54:43 +01:00