cclang-static-analyzerfalse-positive

Why does Clang static analyzer think that this is use-after-free?


I'm probably just stupid:

    fileref_t *fref;

    while (gli_filereflist != NULL)
    {
        fref = gli_filereflist;
        if (fref != NULL)
        {
            glk_fileref_destroy(fref);   <-------- Use of memory after it is freed
            fref = NULL;
        }
    }

This is after I added the NULL check and explicitly set fref to NULL after free().

Xcode 12.3. Original code here.

If this is a false positive, is there a way to silence it?

EDIT: gli_filereflist is a linked list, which will point to the next item in the list when the first one is destroyed.


Solution

  • This worked:

        while (gli_filereflist)
        {
            fref = gli_filereflist;
            gli_filereflist = gli_filereflist->next;
            glk_fileref_destroy(fref);
        }