Hi everyone,

I'm still playing around with the analyzer, and wanted to have a look at loop handling.
I'm using a build from /trunk/ branch (/20230309/).

Here is my analyzed code:

'''
1| #include <stdlib.h>
2| int main(void) {
3|    void * ptr = malloc(sizeof(int));
4|    for (int i = 0; i < 10; i++) {
5|        if (i == 5) free(ptr);
6|    }
7|}
'''

And here, the malloc-sm is reporting a double-free on line 5 with a quite confusing output:

'''
./test.c: In function ‘main’:
./test.c:5:21: warning: double-‘free’ of ‘ptr’ [CWE-415] [-Wanalyzer-double-free]
    5 |         if (i == 5) free(ptr);
       |                         ^~~~~~~~~
  ‘main’: events 1-13
    |
    |   3 |     void * ptr = malloc(sizeof(int));
    |      |                        ^~~~~~~~~~~~~~~~~~~
    |      |                        |
    |      |                        (1) allocated here
    |   4 |     for (int i = 0; i < 10; i++) {
    |      |                         ~~~~  ~~~
    |      |                         |            |
    |      |                         |            (5) ...to here
    |      |                         (2) following ‘true’ branch (when ‘i <= 9’)...     |      |                         (6) following ‘true’ branch (when ‘i <= 9’)...     |      |                         (9) following ‘true’ branch (when ‘i <= 9’)...
    |   5 |         if (i == 5) free(ptr);
    |      |            ~           ~~~~~
    |      |            |             |
    |      |            |             (8) first ‘free’ here
    |      |            |             (12) ...to here
    |      |            |             (13) second ‘free’ here; first ‘free’ was at (8)
    |      |            (3) ...to here
    |      |            (4) following ‘false’ branch (when ‘i != 5’)...
    |      |            (7) ...to here
    |      |            (10) ...to here
    |      |            (11) following ‘true’ branch (when ‘i == 5’)...
    |
'''

So, I'm guessing that this false positive is due to how the analyzer is handling loops.
Which lead to my question: how are loops handled by the analyzer?

Thanks for your time,

Pierrick

Reply via email to