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)
							 | 
						||
| 
								 | 
							
								
							 |