On Mon, 21 Mar 2011, Anders Wegge Keller wrote:
> Hi,
>
> I've tried going over our codebase with the following script, to find
> places where memory allocations are not checked before usage:
>
> @@
> identifier ptr, fld;
> @@
> * ptr = dMemAlloc(...)
>
> ... when != (ptr != NULL)
>
> * ptr->fld
Try:
@@
identifier ptr, fld;
@@
(
(ptr = dMemAlloc(...)) == NULL
|
* ptr = dMemAlloc(...)
... when != (ptr != NULL)
* ptr->fld
)
julia
> dMemAlloc() is a wrapper around malloc().
>
> The script works as I intended it to, but I have run into a problem
> with a false positive:
>
>
> --- ./logf.c 2010-05-10 14:22:02.000000000 +0200
> +++ /tmp/nothing/qqlogf.c
> @@ -85,14 +85,12 @@ logFd_t *logfOpen (const char *filename,
> }
>
> /* Allocate memory for logfile descriptor */
> - if ( (fd = dMemAlloc(sizeof(*fd))) == NULL ) {
> dLog (logSys, "logfOpen: failed to dMemAlloc(%u bytes), error %s",
> sizeof(*fd), dErrTxt()) ;
> fclose (fp) ;
> return NULL ;
> }
>
> - FSTRNCPY (fd->filename, filename) ;
> fd->fp = fp ;
>
> I'm not really sure how to catch the error handling, that end us in
> the return here. My best guess at a solution is this
>
> ... when != (
> (ptr != NULL)
> |
> return
> )
>
> But that doesn't even parse, so I'm a bit lost here. Is there a
> negative form of when any, I could use here, or should I catch this in
> an entirely different way?
>
>
> --
> /Wegge
>
> Leder efter redundant peering af dk.*,linux.debian.*
>
> _______________________________________________
> Cocci mailing list
> [email protected]
> http://lists.diku.dk/mailman/listinfo/cocci
> (Web access from inside DIKUs LAN only)
>
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)