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 15virtual patch 16virtual context 17virtual org 18virtual report 19 20//---------------------------------------------------------- 21// For context mode 22//---------------------------------------------------------- 23 24@depends on context disable sizeof_type_expr@ 25type T; 26T **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@ 39type T; 40T **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@ 54type T; 55T **x; 56position p; 57@@ 58 59 x = 60 <+...sizeof( 61 T@p 62 )...+> 63 64@script:python depends on org@ 65p << r.p; 66@@ 67 68coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type") 69 70@script:python depends on report@ 71p << r.p; 72@@ 73 74msg="WARNING: Use correct pointer type argument for sizeof" 75coccilib.report.print_report(p[0], msg) 76 77