77 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | /// 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) | ||
|  | 
 |