diff options
Diffstat (limited to 'qa/coccinelle/malloc-error-check.cocci')
-rw-r--r-- | qa/coccinelle/malloc-error-check.cocci | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/qa/coccinelle/malloc-error-check.cocci b/qa/coccinelle/malloc-error-check.cocci new file mode 100644 index 0000000..ce4d0cc --- /dev/null +++ b/qa/coccinelle/malloc-error-check.cocci @@ -0,0 +1,69 @@ +@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) +| +FAIL_IF(x == NULL) +| +FAIL_IF(unlikely(x == NULL)) +| +FAIL_IF_NULL(x) +) + + +@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) |