blob: 481cf301ccfc3abf2b68c8dcc8b59612ed2e9841 [file] [log] [blame]
Heinrich Schuchardtb38d6ca2017-11-10 19:15:02 +01001/// 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