[cfe-commits] [PATCH 1/1] Checking zero byte allocation for realloc() and calloc().
benny.kra at googlemail.com
Sun Nov 13 05:05:38 CST 2011
On 13.11.2011, at 02:52, Cyril Roelandt wrote:
> Currently, clang can check zero byte allocations for the malloc function. I think it should also warn programmers about zero byte allocations for the calloc and realloc functions.
> Attached is a patch that implements this idea. It checks either the first argument of malloc(), or the second argument of realloc(), or both arguments of calloc(), looking for a value constrained to 0.
Nice! Thanks for working on this.
> Checking both arguments of calloc() makes the code a little bit ugly, so I'll probably need to give it some more work.
- Use 3 separate methods for the 3 functions (CheckMallocZero/CheckCallocZero/CheckReallocZero) where the prototype is checked.
- Factor the actual 0-checking and report emission into a helper method.
- Call the new helper method on the argument (or both arguments in the case of calloc).
> You may find a test case attached to this mail :
It would be nice to add these tests to test/Analysis/unix-fns.c so they're part of our regression tests. Just copy the code in there and add comments to validate the warning message, the format is straight forward.
> $ clang --analyze -c -o alloc alloc.c
> /tmp/alloc.c:29:16: warning: Call to 'malloc' has an allocation size of 0 bytes
> int *ptr = malloc(0);
> ^ ~
> /tmp/alloc.c:36:16: warning: Call to 'calloc' has an allocation size of 0 bytes
> int *ptr = calloc(0, sizeof(int));
> ^ ~
> /tmp/alloc.c:43:16: warning: Call to 'calloc' has an allocation size of 0 bytes
> int *ptr = calloc(42, 0);
> ^ ~
> /tmp/alloc.c:50:16: warning: Call to 'realloc' has an allocation size of 0 bytes
> int *ptr = realloc(NULL, 0);
> ^ ~
> Looking forward to hearing from you,
> Cyril Roelandt.
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
More information about the cfe-commits