The code:
struct tmp_device {
    char** descr;
    int descr_len;
};

typedef struct tmp_device tmp_device_t;

static void release_device(tmp_device_t* d) {
    if (d != NULL) {
        if (d->descr != NULL) {
            int i = 0;
            for (; i < d->descr_len; i++) {
                if (d->descr[i] != NULL) {
                    free(d->descr[i]);
                }
            }
            free(d->descr);
        }
        free(d);
    }
}

The checker:
@@
expression E;
identifier func !~ "dbg";
@@

free(E)

...

(
- func(E)
+ BUG(E)
)

The result:
EXN:Invalid_argument("equal: abstract value")

Regards,
Robert
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to