Skip to content

Commit 50e1154

Browse files
frontends: python: add more data extraction (#300)
1 parent c8f2470 commit 50e1154

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

frontends/python/main.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

201206
def 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
221229
if __name__ == "__main__":
222230
main()

0 commit comments

Comments
 (0)