This makes an effort to find cases where the argument to sizeof is wrong in memory allocation functions by checking the type of the allocated memory when it is a double pointer and ensuring the sizeof argument takes a pointer to the the memory being allocated. There are false positives in cases the sizeof argument is not used in constructing the return value. Signed-off-by: Himangi Saraogi <himangi774@gmail.com> Acked-by: Julia Lawall <julia.lawall@lip6.fr> Signed-off-by: Michal Marek <mmarek@suse.cz>tirimbino
parent
7ab04ea0e3
commit
e52320c3b2
@ -0,0 +1,76 @@ |
||||
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element |
||||
/// |
||||
//# This makes an effort to find cases where the argument to sizeof is wrong |
||||
//# in memory allocation functions by checking the type of the allocated memory |
||||
//# when it is a double pointer and ensuring the sizeof argument takes a pointer |
||||
//# to the the memory being allocated. There are false positives in cases the |
||||
//# sizeof argument is not used in constructing the return value. The result |
||||
//# may need some reformatting. |
||||
// |
||||
// Confidence: Moderate |
||||
// Copyright: (C) 2014 Himangi Saraogi. GPLv2. |
||||
// Comments: |
||||
// Options: |
||||
|
||||
virtual patch |
||||
virtual context |
||||
virtual org |
||||
virtual report |
||||
|
||||
//---------------------------------------------------------- |
||||
// For context mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on context disable sizeof_type_expr@ |
||||
type T; |
||||
T **x; |
||||
@@ |
||||
|
||||
x = |
||||
<+...sizeof( |
||||
* T |
||||
)...+> |
||||
|
||||
//---------------------------------------------------------- |
||||
// For patch mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on patch disable sizeof_type_expr@ |
||||
type T; |
||||
T **x; |
||||
@@ |
||||
|
||||
x = |
||||
<+...sizeof( |
||||
- T |
||||
+ *x |
||||
)...+> |
||||
|
||||
//---------------------------------------------------------- |
||||
// For org and report mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@r disable sizeof_type_expr@ |
||||
type T; |
||||
T **x; |
||||
position p; |
||||
@@ |
||||
|
||||
x = |
||||
<+...sizeof( |
||||
T@p |
||||
)...+> |
||||
|
||||
@script:python depends on org@ |
||||
p << r.p; |
||||
@@ |
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type") |
||||
|
||||
@script:python depends on report@ |
||||
p << r.p; |
||||
@@ |
||||
|
||||
msg="WARNING: Use correct pointer type argument for sizeof" |
||||
coccilib.report.print_report(p[0], msg) |
||||
|
Loading…
Reference in new issue