]>
Commit | Line | Data |
---|---|---|
e52320c3 HS |
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 | ||
8f551bef | 53 | @r depends on (org || report) disable sizeof_type_expr@ |
e52320c3 HS |
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 |