1*06feb5d0SHeinrich Schuchardt/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element 2*06feb5d0SHeinrich Schuchardt/// 3*06feb5d0SHeinrich Schuchardt//# This makes an effort to find cases where the argument to sizeof is wrong 4*06feb5d0SHeinrich Schuchardt//# in memory allocation functions by checking the type of the allocated memory 5*06feb5d0SHeinrich Schuchardt//# when it is a double pointer and ensuring the sizeof argument takes a pointer 6*06feb5d0SHeinrich Schuchardt//# to the the memory being allocated. There are false positives in cases the 7*06feb5d0SHeinrich Schuchardt//# sizeof argument is not used in constructing the return value. The result 8*06feb5d0SHeinrich Schuchardt//# may need some reformatting. 9*06feb5d0SHeinrich Schuchardt// 10*06feb5d0SHeinrich Schuchardt// Confidence: Moderate 11*06feb5d0SHeinrich Schuchardt// Copyright: (C) 2014 Himangi Saraogi. GPLv2. 12*06feb5d0SHeinrich Schuchardt// Comments: 13*06feb5d0SHeinrich Schuchardt// Options: 14*06feb5d0SHeinrich Schuchardt 15*06feb5d0SHeinrich Schuchardtvirtual patch 16*06feb5d0SHeinrich Schuchardtvirtual context 17*06feb5d0SHeinrich Schuchardtvirtual org 18*06feb5d0SHeinrich Schuchardtvirtual report 19*06feb5d0SHeinrich Schuchardt 20*06feb5d0SHeinrich Schuchardt//---------------------------------------------------------- 21*06feb5d0SHeinrich Schuchardt// For context mode 22*06feb5d0SHeinrich Schuchardt//---------------------------------------------------------- 23*06feb5d0SHeinrich Schuchardt 24*06feb5d0SHeinrich Schuchardt@depends on context disable sizeof_type_expr@ 25*06feb5d0SHeinrich Schuchardttype T; 26*06feb5d0SHeinrich SchuchardtT **x; 27*06feb5d0SHeinrich Schuchardt@@ 28*06feb5d0SHeinrich Schuchardt 29*06feb5d0SHeinrich Schuchardt x = 30*06feb5d0SHeinrich Schuchardt <+...sizeof( 31*06feb5d0SHeinrich Schuchardt* T 32*06feb5d0SHeinrich Schuchardt )...+> 33*06feb5d0SHeinrich Schuchardt 34*06feb5d0SHeinrich Schuchardt//---------------------------------------------------------- 35*06feb5d0SHeinrich Schuchardt// For patch mode 36*06feb5d0SHeinrich Schuchardt//---------------------------------------------------------- 37*06feb5d0SHeinrich Schuchardt 38*06feb5d0SHeinrich Schuchardt@depends on patch disable sizeof_type_expr@ 39*06feb5d0SHeinrich Schuchardttype T; 40*06feb5d0SHeinrich SchuchardtT **x; 41*06feb5d0SHeinrich Schuchardt@@ 42*06feb5d0SHeinrich Schuchardt 43*06feb5d0SHeinrich Schuchardt x = 44*06feb5d0SHeinrich Schuchardt <+...sizeof( 45*06feb5d0SHeinrich Schuchardt- T 46*06feb5d0SHeinrich Schuchardt+ *x 47*06feb5d0SHeinrich Schuchardt )...+> 48*06feb5d0SHeinrich Schuchardt 49*06feb5d0SHeinrich Schuchardt//---------------------------------------------------------- 50*06feb5d0SHeinrich Schuchardt// For org and report mode 51*06feb5d0SHeinrich Schuchardt//---------------------------------------------------------- 52*06feb5d0SHeinrich Schuchardt 53*06feb5d0SHeinrich Schuchardt@r depends on (org || report) disable sizeof_type_expr@ 54*06feb5d0SHeinrich Schuchardttype T; 55*06feb5d0SHeinrich SchuchardtT **x; 56*06feb5d0SHeinrich Schuchardtposition p; 57*06feb5d0SHeinrich Schuchardt@@ 58*06feb5d0SHeinrich Schuchardt 59*06feb5d0SHeinrich Schuchardt x = 60*06feb5d0SHeinrich Schuchardt <+...sizeof( 61*06feb5d0SHeinrich Schuchardt T@p 62*06feb5d0SHeinrich Schuchardt )...+> 63*06feb5d0SHeinrich Schuchardt 64*06feb5d0SHeinrich Schuchardt@script:python depends on org@ 65*06feb5d0SHeinrich Schuchardtp << r.p; 66*06feb5d0SHeinrich Schuchardt@@ 67*06feb5d0SHeinrich Schuchardt 68*06feb5d0SHeinrich Schuchardtcoccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type") 69*06feb5d0SHeinrich Schuchardt 70*06feb5d0SHeinrich Schuchardt@script:python depends on report@ 71*06feb5d0SHeinrich Schuchardtp << r.p; 72*06feb5d0SHeinrich Schuchardt@@ 73*06feb5d0SHeinrich Schuchardt 74*06feb5d0SHeinrich Schuchardtmsg="WARNING: Use correct pointer type argument for sizeof" 75*06feb5d0SHeinrich Schuchardtcoccilib.report.print_report(p[0], msg) 76*06feb5d0SHeinrich Schuchardt 77