diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /scripts/coccinelle/null/deref_null.cocci | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'scripts/coccinelle/null/deref_null.cocci')
-rw-r--r-- | scripts/coccinelle/null/deref_null.cocci | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/scripts/coccinelle/null/deref_null.cocci b/scripts/coccinelle/null/deref_null.cocci new file mode 100644 index 000000000000..cdac6cfcce92 --- /dev/null +++ b/scripts/coccinelle/null/deref_null.cocci | |||
@@ -0,0 +1,282 @@ | |||
1 | /// | ||
2 | /// A variable is dereference under a NULL test. | ||
3 | /// Even though it is know to be NULL. | ||
4 | /// | ||
5 | // Confidence: Moderate | ||
6 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | ||
7 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | ||
8 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | ||
9 | // URL: http://coccinelle.lip6.fr/ | ||
10 | // Comments: -I ... -all_includes can give more complete results | ||
11 | // Options: | ||
12 | |||
13 | virtual context | ||
14 | virtual org | ||
15 | virtual report | ||
16 | |||
17 | @ifm@ | ||
18 | expression *E; | ||
19 | statement S1,S2; | ||
20 | position p1; | ||
21 | @@ | ||
22 | |||
23 | if@p1 ((E == NULL && ...) || ...) S1 else S2 | ||
24 | |||
25 | // The following two rules are separate, because both can match a single | ||
26 | // expression in different ways | ||
27 | @pr1 expression@ | ||
28 | expression *ifm.E; | ||
29 | identifier f; | ||
30 | position p1; | ||
31 | @@ | ||
32 | |||
33 | (E != NULL && ...) ? <+...E->f@p1...+> : ... | ||
34 | |||
35 | @pr2 expression@ | ||
36 | expression *ifm.E; | ||
37 | identifier f; | ||
38 | position p2; | ||
39 | @@ | ||
40 | |||
41 | ( | ||
42 | (E != NULL) && ... && <+...E->f@p2...+> | ||
43 | | | ||
44 | (E == NULL) || ... || <+...E->f@p2...+> | ||
45 | | | ||
46 | sizeof(<+...E->f@p2...+>) | ||
47 | ) | ||
48 | |||
49 | // For org and report modes | ||
50 | |||
51 | @r depends on !context && (org || report) exists@ | ||
52 | expression subE <= ifm.E; | ||
53 | expression *ifm.E; | ||
54 | expression E1,E2; | ||
55 | identifier f; | ||
56 | statement S1,S2,S3,S4; | ||
57 | iterator iter; | ||
58 | position p!={pr1.p1,pr2.p2}; | ||
59 | position ifm.p1; | ||
60 | @@ | ||
61 | |||
62 | if@p1 ((E == NULL && ...) || ...) | ||
63 | { | ||
64 | ... when != if (...) S1 else S2 | ||
65 | ( | ||
66 | iter(subE,...) S4 // no use | ||
67 | | | ||
68 | list_remove_head(E2,subE,...) | ||
69 | | | ||
70 | subE = E1 | ||
71 | | | ||
72 | for(subE = E1;...;...) S4 | ||
73 | | | ||
74 | subE++ | ||
75 | | | ||
76 | ++subE | ||
77 | | | ||
78 | --subE | ||
79 | | | ||
80 | subE-- | ||
81 | | | ||
82 | &subE | ||
83 | | | ||
84 | E->f@p // bad use | ||
85 | ) | ||
86 | ... when any | ||
87 | return ...; | ||
88 | } | ||
89 | else S3 | ||
90 | |||
91 | @script:python depends on !context && !org && report@ | ||
92 | p << r.p; | ||
93 | p1 << ifm.p1; | ||
94 | x << ifm.E; | ||
95 | @@ | ||
96 | |||
97 | msg="ERROR: %s is NULL but dereferenced." % (x) | ||
98 | coccilib.report.print_report(p[0], msg) | ||
99 | cocci.include_match(False) | ||
100 | |||
101 | @script:python depends on !context && org && !report@ | ||
102 | p << r.p; | ||
103 | p1 << ifm.p1; | ||
104 | x << ifm.E; | ||
105 | @@ | ||
106 | |||
107 | msg="ERROR: %s is NULL but dereferenced." % (x) | ||
108 | msg_safe=msg.replace("[","@(").replace("]",")") | ||
109 | cocci.print_main(msg_safe,p) | ||
110 | cocci.include_match(False) | ||
111 | |||
112 | @s depends on !context && (org || report) exists@ | ||
113 | expression subE <= ifm.E; | ||
114 | expression *ifm.E; | ||
115 | expression E1,E2; | ||
116 | identifier f; | ||
117 | statement S1,S2,S3,S4; | ||
118 | iterator iter; | ||
119 | position p!={pr1.p1,pr2.p2}; | ||
120 | position ifm.p1; | ||
121 | @@ | ||
122 | |||
123 | if@p1 ((E == NULL && ...) || ...) | ||
124 | { | ||
125 | ... when != if (...) S1 else S2 | ||
126 | ( | ||
127 | iter(subE,...) S4 // no use | ||
128 | | | ||
129 | list_remove_head(E2,subE,...) | ||
130 | | | ||
131 | subE = E1 | ||
132 | | | ||
133 | for(subE = E1;...;...) S4 | ||
134 | | | ||
135 | subE++ | ||
136 | | | ||
137 | ++subE | ||
138 | | | ||
139 | --subE | ||
140 | | | ||
141 | subE-- | ||
142 | | | ||
143 | &subE | ||
144 | | | ||
145 | E->f@p // bad use | ||
146 | ) | ||
147 | ... when any | ||
148 | } | ||
149 | else S3 | ||
150 | |||
151 | @script:python depends on !context && !org && report@ | ||
152 | p << s.p; | ||
153 | p1 << ifm.p1; | ||
154 | x << ifm.E; | ||
155 | @@ | ||
156 | |||
157 | msg="ERROR: %s is NULL but dereferenced." % (x) | ||
158 | coccilib.report.print_report(p[0], msg) | ||
159 | |||
160 | @script:python depends on !context && org && !report@ | ||
161 | p << s.p; | ||
162 | p1 << ifm.p1; | ||
163 | x << ifm.E; | ||
164 | @@ | ||
165 | |||
166 | msg="ERROR: %s is NULL but dereferenced." % (x) | ||
167 | msg_safe=msg.replace("[","@(").replace("]",")") | ||
168 | cocci.print_main(msg_safe,p) | ||
169 | |||
170 | // For context mode | ||
171 | |||
172 | @depends on context && !org && !report exists@ | ||
173 | expression subE <= ifm.E; | ||
174 | expression *ifm.E; | ||
175 | expression E1,E2; | ||
176 | identifier f; | ||
177 | statement S1,S2,S3,S4; | ||
178 | iterator iter; | ||
179 | position p!={pr1.p1,pr2.p2}; | ||
180 | position ifm.p1; | ||
181 | @@ | ||
182 | |||
183 | if@p1 ((E == NULL && ...) || ...) | ||
184 | { | ||
185 | ... when != if (...) S1 else S2 | ||
186 | ( | ||
187 | iter(subE,...) S4 // no use | ||
188 | | | ||
189 | list_remove_head(E2,subE,...) | ||
190 | | | ||
191 | subE = E1 | ||
192 | | | ||
193 | for(subE = E1;...;...) S4 | ||
194 | | | ||
195 | subE++ | ||
196 | | | ||
197 | ++subE | ||
198 | | | ||
199 | --subE | ||
200 | | | ||
201 | subE-- | ||
202 | | | ||
203 | &subE | ||
204 | | | ||
205 | * E->f@p // bad use | ||
206 | ) | ||
207 | ... when any | ||
208 | return ...; | ||
209 | } | ||
210 | else S3 | ||
211 | |||
212 | // The following three rules are duplicates of ifm, pr1 and pr2 respectively. | ||
213 | // It is need because the previous rule as already made a "change". | ||
214 | |||
215 | @ifm1@ | ||
216 | expression *E; | ||
217 | statement S1,S2; | ||
218 | position p1; | ||
219 | @@ | ||
220 | |||
221 | if@p1 ((E == NULL && ...) || ...) S1 else S2 | ||
222 | |||
223 | @pr11 expression@ | ||
224 | expression *ifm1.E; | ||
225 | identifier f; | ||
226 | position p1; | ||
227 | @@ | ||
228 | |||
229 | (E != NULL && ...) ? <+...E->f@p1...+> : ... | ||
230 | |||
231 | @pr12 expression@ | ||
232 | expression *ifm1.E; | ||
233 | identifier f; | ||
234 | position p2; | ||
235 | @@ | ||
236 | |||
237 | ( | ||
238 | (E != NULL) && ... && <+...E->f@p2...+> | ||
239 | | | ||
240 | (E == NULL) || ... || <+...E->f@p2...+> | ||
241 | | | ||
242 | sizeof(<+...E->f@p2...+>) | ||
243 | ) | ||
244 | |||
245 | @depends on context && !org && !report exists@ | ||
246 | expression subE <= ifm1.E; | ||
247 | expression *ifm1.E; | ||
248 | expression E1,E2; | ||
249 | identifier f; | ||
250 | statement S1,S2,S3,S4; | ||
251 | iterator iter; | ||
252 | position p!={pr11.p1,pr12.p2}; | ||
253 | position ifm1.p1; | ||
254 | @@ | ||
255 | |||
256 | if@p1 ((E == NULL && ...) || ...) | ||
257 | { | ||
258 | ... when != if (...) S1 else S2 | ||
259 | ( | ||
260 | iter(subE,...) S4 // no use | ||
261 | | | ||
262 | list_remove_head(E2,subE,...) | ||
263 | | | ||
264 | subE = E1 | ||
265 | | | ||
266 | for(subE = E1;...;...) S4 | ||
267 | | | ||
268 | subE++ | ||
269 | | | ||
270 | ++subE | ||
271 | | | ||
272 | --subE | ||
273 | | | ||
274 | subE-- | ||
275 | | | ||
276 | &subE | ||
277 | | | ||
278 | * E->f@p // bad use | ||
279 | ) | ||
280 | ... when any | ||
281 | } | ||
282 | else S3 | ||