@@ -81,12 +81,14 @@ def run_fuzz_pass(fuzzer, package):
8181 - 1 ,
8282 CALL_GRAPH_OP
8383 )
84+ print ("Analysing1" )
8485 cg .analyze ()
86+ print ("Analysing2" )
8587
8688 formatter = formats .Fuzz (cg )
8789 cg_extended = formatter .generate ()
8890
89- calltree = convert_to_fuzzing_cfg (cg_extended )
91+ calltree , max_depth = convert_to_fuzzing_cfg (cg_extended )
9092 if calltree == None :
9193 print ("Could not convert calltree to string. Exiting" )
9294 sys .exit (1 )
@@ -144,6 +146,8 @@ def translate_cg(cg_extended, fuzzer_filename):
144146 # TODO: do the implementation necessary to carry these out.
145147 for elem in cg_extended ['cg' ]:
146148 elem_dict = cg_extended ['cg' ][elem ]
149+ tmpval , max_depth = get_calltree_as_str (cg_extended ['cg' ], elem , set ())
150+
147151 d = dict ()
148152 d ['functionName' ] = elem
149153 d ['functionSourceFile' ] = elem_dict ['meta' ]['modname' ]
@@ -152,12 +156,12 @@ def translate_cg(cg_extended, fuzzer_filename):
152156 d ['functionLinenumber' ] = elem_dict ['meta' ]['lineno' ]
153157 else :
154158 d ['functionLinenumber' ] = - 1
155- d ['functionDepth' ] = 0
159+ d ['functionDepth' ] = max_depth
156160 d ['returnType' ] = "N/A"
157- d ['argCount' ] = 0
158- d ['argTypes' ] = []
161+ d ['argCount' ] = elem_dict ['meta' ]['argCount' ] if 'argCount' in elem_dict ['meta' ] else 0
159162 d ['constantsTouched' ] = []
160- d ['argNames' ] = []
163+ d ['argNames' ] = elem_dict ['meta' ]['argNames' ] if 'argNames' in elem_dict ['meta' ] else []
164+ d ['argTypes' ] = elem_dict ['meta' ]['argTypes' ] if 'argTypes' in elem_dict ['meta' ] else []
161165 d ['BBCount' ] = 0
162166 d ['ICount' ] = 0
163167 d ['EdgeCount' ] = 0
@@ -194,9 +198,10 @@ def convert_to_fuzzing_cfg(cg_extended):
194198 ep_node = cg_extended ['cg' ][ep_key ]
195199 #print(json.dumps(cg_extended, indent=4))
196200 calltree = "Call tree\n "
197- calltree += get_calltree_as_str (cg_extended ['cg' ], ep_key , set ())
201+ calltree2 , max_depth = get_calltree_as_str (cg_extended ['cg' ], ep_key , set ())
202+ calltree = calltree + calltree2
198203 #print(calltree)
199- return calltree
204+ return calltree , max_depth
200205
201206def get_calltree_as_str (cg_extended , k , s1 , depth = 0 , lineno = - 1 , themod = "" , ext_mod = "" ):
202207 """Prints a calltree where k is the key in the cg of the root"""
@@ -211,12 +216,15 @@ def get_calltree_as_str(cg_extended, k, s1, depth=0, lineno=-1, themod="", ext_m
211216
212217 # Avoid deep recursions
213218 if k in s1 :
214- return strline
219+ return strline , depth
215220
216221 s1 .add (k )
222+ next_depth = depth
217223 for dst in cg_extended [k ]['dsts' ]:
218- strline += get_calltree_as_str (cg_extended , dst ['dst' ], s1 , depth + 1 , dst ['lineno' ], dst ['mod' ], dst ['ext_mod' ])
224+ tmps , m_depth = get_calltree_as_str (cg_extended , dst ['dst' ], s1 , depth + 1 , dst ['lineno' ], dst ['mod' ], dst ['ext_mod' ])
225+ next_depth = max (m_depth , next_depth )
226+ strline += tmps
219227
220- return strline
228+ return strline , next_depth
221229if __name__ == "__main__" :
222230 main ()
0 commit comments