summaryrefslogtreecommitdiffstats
path: root/framework/src/suricata/qa/coccinelle/malloc-error-check.cocci
blob: b245189a23b4a04faf3558e08103cc7ad099f119 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
@malloced@
expression x;
position p1;
identifier func =~ "(SCMalloc|SCStrdup|SCCalloc|SCMallocAligned|SCRealloc)";
@@

x@p1 = func(...)

@inlinetested@
expression x, E;
statement S;
position malloced.p1;
identifier func =~ "(SCMalloc|SCStrdup|SCCalloc|SCMallocAligned|SCRealloc)";
@@

(
if ((x@p1 = func(...)) == NULL) S
|
if (E && (x@p1 = func(...)) == NULL) S
)

@realloc exists@
position malloced.p1;
expression x, E1;
identifier func =~ "(SCMalloc|SCCalloc|SCMallocAligned)";
@@

x@p1 = func(...)
... when != x
x = SCRealloc(x, E1)

@istested depends on !realloc exists@
expression x, E1;
position malloced.p1;
statement S1, S2;
identifier func =~ "(SCMalloc|SCStrdup|SCCalloc|SCMallocAligned|SCRealloc)";
@@

x@p1 = func(...)
... when != x
(
if (unlikely(x == NULL)) S1
|
if (unlikely(x == NULL)) S1 else S2
|
if (likely(x != NULL)) S1
|
if (x == NULL) S1
|
if (x != NULL) S1 else S2
|
if (x && E1) S1
|
BUG_ON(x == NULL)
)


@script:python depends on !realloc && !istested && !inlinetested@
p1 << malloced.p1;
@@
print "Structure malloced at %s:%s but error is not checked." % (p1[0].file, p1[0].line)
import sys
sys.exit(1)