coccinelle: Add script to check legal usage of sizeof expression
sizeof when applied to a pointer typed expression gives the size of the pointer and not the size of the object associated with the pointer expression leading to errors. This scripts checks for inconsistencies where sizeof is incorrectly used, especially while calculating size of memory to be allocated in memory allocating functions. Eg: - memset(pStr, 0, sizeof(pStr)); + memset(pStr, 0, sizeof(*pStr)); Signed-off-by: Himanshu Jha <himanshujha199640@gmail.com>
This commit is contained in:
parent
d0a98b7cf9
commit
58781d5782
1 changed files with 81 additions and 0 deletions
81
scripts/coccinelle/noderef.cocci
Normal file
81
scripts/coccinelle/noderef.cocci
Normal file
|
@ -0,0 +1,81 @@
|
|||
/// sizeof when applied to a pointer typed expression gives the size of
|
||||
/// the pointer
|
||||
///
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options: --no-includes --include-headers
|
||||
|
||||
virtual org
|
||||
virtual report
|
||||
virtual context
|
||||
virtual patch
|
||||
|
||||
@depends on patch@
|
||||
expression *x;
|
||||
expression f;
|
||||
expression i;
|
||||
type T;
|
||||
@@
|
||||
|
||||
(
|
||||
x = <+... sizeof(
|
||||
- x
|
||||
+ *x
|
||||
) ...+>
|
||||
|
|
||||
f(...,(T)(x),...,sizeof(
|
||||
- x
|
||||
+ *x
|
||||
),...)
|
||||
|
|
||||
f(...,sizeof(
|
||||
- x
|
||||
+ *x
|
||||
),...,(T)(x),...)
|
||||
|
|
||||
f(...,(T)(x),...,i*sizeof(
|
||||
- x
|
||||
+ *x
|
||||
),...)
|
||||
|
|
||||
f(...,i*sizeof(
|
||||
- x
|
||||
+ *x
|
||||
),...,(T)(x),...)
|
||||
)
|
||||
|
||||
@r depends on !patch@
|
||||
expression *x;
|
||||
expression f;
|
||||
expression i;
|
||||
position p;
|
||||
type T;
|
||||
@@
|
||||
|
||||
(
|
||||
*x = <+... sizeof@p(x) ...+>
|
||||
|
|
||||
*f(...,(T)(x),...,sizeof@p(x),...)
|
||||
|
|
||||
*f(...,sizeof@p(x),...,(T)(x),...)
|
||||
|
|
||||
*f(...,(T)(x),...,i*sizeof@p(x),...)
|
||||
|
|
||||
*f(...,i*sizeof@p(x),...,(T)(x),...)
|
||||
)
|
||||
|
||||
@script:python depends on org@
|
||||
p << r.p;
|
||||
@@
|
||||
|
||||
cocci.print_main("application of sizeof to pointer",p)
|
||||
|
||||
@script:python depends on report@
|
||||
p << r.p;
|
||||
@@
|
||||
|
||||
msg = "ERROR: application of sizeof to pointer"
|
||||
coccilib.report.print_report(p[0],msg)
|
Loading…
Add table
Add a link
Reference in a new issue