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