sarif-to-dot: remove module-variable references

This commit is contained in:
Michael Hohn
2022-01-25 17:49:07 -08:00
committed by =Michael Hohn
parent 86caa3f56f
commit 0444a87076

View File

@@ -13,13 +13,13 @@ class Context:
sig_to_typedef: dict # signature to typedef name map
sig_count: int # simple struct counter for Struct%03d names
def _signature_dict(elem, context):
def _signature_dict(args, elem, context):
""" Assemble and return the signature for a dictionary.
"""
# Collect signatures
sig = {}
for key, val in elem.items():
sig[key] = _signature(val, context)
sig[key] = _signature(args, val, context)
# Sort signature
keys = list(elem.keys())
keys.sort()
@@ -33,14 +33,14 @@ def _signature_dict(elem, context):
signature = context.sig_to_typedef[signature]
return signature
def _signature_list(elem, context):
def _signature_list(args, elem, context):
""" Assemble and return the signature for a Python list.
"""
if args.unique_array_signatures:
# Collect all unique signatures
sig = set()
for el in elem:
sig.add(_signature(el, context))
sig.add(_signature(args, el, context))
sig = list(sig)
sig.sort()
signature = ("array", ) + tuple([(i, s) for (i, s) in enumerate(sig)])
@@ -48,7 +48,7 @@ def _signature_list(elem, context):
# Collect all signatures
sig = []
for el in elem:
sig.append(_signature(el, context))
sig.append(_signature(args, el, context))
signature = ("array", ) + tuple([(i, s) for (i, s) in enumerate(sig)])
if args.typedef_signatures:
# Give every unique array a name and use a reference to it as value.
@@ -58,14 +58,14 @@ def _signature_list(elem, context):
signature = context.sig_to_typedef[signature]
return signature
def _signature(elem, context):
def _signature(args, elem, context):
""" Assemble and return the signature for a list/dict/value structure.
"""
t = type(elem)
if t == dict:
return _signature_dict(elem, context)
return _signature_dict(args, elem, context)
elif t == list:
return _signature_list(elem, context)
return _signature_list(args, elem, context)
elif t == str:
if args.typedef_signatures:
return context.sig_to_typedef["string"]
@@ -185,7 +185,7 @@ with open(args.file, 'r') if args.file != '-' else sys.stdin as fp:
sarif_struct = json.load(fp)
if args.dot_output:
_signature(sarif_struct, context)
_signature(args, sarif_struct, context)
struct_graph = [(typedef, sig) for sig, typedef in context.sig_to_typedef.items()]
write_header(sys.stdout)
for typedef, sig in struct_graph:
@@ -195,8 +195,8 @@ if args.dot_output:
write_footer(sys.stdout)
elif args.typedef_signatures:
_signature(sarif_struct, context)
_signature(args, sarif_struct, context)
struct_graph = [(typedef, sig) for sig,typedef in context.sig_to_typedef.items()]
pprint(struct_graph, sys.stdout, indent=2)
else:
pprint(_signature(sarif_struct, context), sys.stdout, indent=2)
pprint(_signature(args, sarif_struct, context), sys.stdout, indent=2)