Home | History | Annotate | Download | only in null
      1 /// This semantic patch looks for malloc etc that are not followed by a
      2 /// NULL check.  It only gives a report in the case where there is some
      3 /// error handling code later in the function, which may be helpful
      4 /// in determining what the error handling code for the call to malloc etc
      5 /// should be.
      6 ///
      7 // Confidence: High
      8 // Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
      9 // Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
     10 // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
     11 // URL: http://coccinelle.lip6.fr/
     12 // Comments:
     13 // Options: --no-includes --include-headers
     14 //
     15 // SPDX-License-Identifier:	GPL-2.0
     16 //
     17 
     18 virtual context
     19 virtual org
     20 virtual report
     21 
     22 @withtest@
     23 expression x;
     24 position p;
     25 identifier f,fld;
     26 @@
     27 
     28 x@p = f(...);
     29 ... when != x->fld
     30 \(x == NULL \| x != NULL\)
     31 
     32 @fixed depends on context && !org && !report@
     33 expression x,x1;
     34 position p1 != withtest.p;
     35 statement S;
     36 position any withtest.p;
     37 identifier f;
     38 @@
     39 
     40 *x@p1 = \(malloc\|calloc\)(...);
     41 ...
     42 *x1@p = f(...);
     43 if (!x1) S
     44 
     45 // ------------------------------------------------------------------------
     46 
     47 @rfixed depends on (org || report) && !context exists@
     48 expression x,x1;
     49 position p1 != withtest.p;
     50 position p2;
     51 statement S;
     52 position any withtest.p;
     53 identifier f;
     54 @@
     55 
     56 x@p1 = \(malloc\|calloc\)(...);
     57 ...
     58 x1@p = f@p2(...);
     59 if (!x1) S
     60 
     61 @script:python depends on org@
     62 p1 << rfixed.p1;
     63 p2 << rfixed.p2;
     64 @@
     65 
     66 cocci.print_main("alloc call",p1)
     67 cocci.print_secs("possible model",p2)
     68 
     69 @script:python depends on report@
     70 p1 << rfixed.p1;
     71 p2 << rfixed.p2;
     72 @@
     73 
     74 msg = "alloc with no test, possible model on line %s" % (p2[0].line)
     75 coccilib.report.print_report(p1[0],msg)
     76