Home | History | Annotate | Download | only in misc
      1 /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
      2 ///
      3 //# This makes an effort to find cases where the argument to sizeof is wrong
      4 //# in memory allocation functions by checking the type of the allocated memory
      5 //# when it is a double pointer and ensuring the sizeof argument takes a pointer
      6 //# to the the memory being allocated. There are false positives in cases the
      7 //# sizeof argument is not used in constructing the return value. The result
      8 //# may need some reformatting.
      9 //
     10 // Confidence: Moderate
     11 // Copyright: (C) 2014 Himangi Saraogi.  GPLv2.
     12 // Comments:
     13 // Options:
     14 
     15 virtual patch
     16 virtual context
     17 virtual org
     18 virtual report
     19 
     20 //----------------------------------------------------------
     21 //  For context mode
     22 //----------------------------------------------------------
     23 
     24 @depends on context disable sizeof_type_expr@
     25 type T;
     26 T **x;
     27 @@
     28 
     29   x =
     30   <+...sizeof(
     31 * T
     32   )...+>
     33 
     34 //----------------------------------------------------------
     35 //  For patch mode
     36 //----------------------------------------------------------
     37 
     38 @depends on patch disable sizeof_type_expr@
     39 type T;
     40 T **x;
     41 @@
     42 
     43   x =
     44   <+...sizeof(
     45 - T
     46 + *x
     47   )...+>
     48 
     49 //----------------------------------------------------------
     50 //  For org and report mode
     51 //----------------------------------------------------------
     52 
     53 @r depends on (org || report) disable sizeof_type_expr@
     54 type T;
     55 T **x;
     56 position p;
     57 @@
     58 
     59   x =
     60   <+...sizeof(
     61   T@p
     62   )...+>
     63 
     64 @script:python depends on org@
     65 p << r.p;
     66 @@
     67 
     68 coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type")
     69 
     70 @script:python depends on report@
     71 p << r.p;
     72 @@
     73 
     74 msg="WARNING: Use correct pointer type argument for sizeof"
     75 coccilib.report.print_report(p[0], msg)
     76 
     77