MCPcopy Create free account
hub / github.com/GPTScan/GPTScan / clean_the_origin_output

Function clean_the_origin_output

src/utils.py:39–77  ·  view source on GitHub ↗
(origin_output:Dict)

Source from the content-addressed store, hash-verified

37
38
39def clean_the_origin_output(origin_output:Dict) -> Dict:
40 sig_vul_map = {}
41 for file_, file_data_ in origin_output.items():
42 for contract_, contract_data_ in file_data_.items():
43 for functionA_, functionA_data_ in contract_data_.items():
44 # visit ONLY FUNCTION first
45 self_vul = set()
46 if "__ONLY_FUNCTION__" in functionA_data_:
47 for vul_type in functionA_data_["__ONLY_FUNCTION__"]:
48 if "StaticAnalysis" in functionA_data_["__ONLY_FUNCTION__"][vul_type] and functionA_data_["__ONLY_FUNCTION__"][vul_type]["StaticAnalysis"] != False:
49 self_vul.add(vul_type)
50 sig_vul_map[f"{file_}!!!{contract_}!!!{functionA_}"] = self_vul
51
52 to_remove = {}
53
54 for file_, file_data_ in origin_output.items():
55 for contract_, contract_data_ in file_data_.items():
56 for functionA_, functionA_data_ in contract_data_.items():
57 for functionB_sig_, functionB_data_ in functionA_data_.items():
58 if functionB_sig_ == "__ONLY_FUNCTION__":
59 continue
60 for vul_type in functionB_data_:
61 if "StaticAnalysis" in functionB_data_[vul_type] and functionB_data_[vul_type]["StaticAnalysis"] != False:
62 if f"{file_}!!!{contract_}!!!{functionA_}" in sig_vul_map and vul_type in sig_vul_map[f"{file_}!!!{contract_}!!!{functionA_}"]:
63 to_remove[f"{file_}!!!{contract_}!!!{functionA_}!!!{functionB_sig_}!!!{vul_type}"] = True
64 logger.info(f"Remove the redundant result: {file_}!!!{contract_}!!!{functionA_}!!!{functionB_sig_}!!!{vul_type}")
65 elif functionB_sig_ in sig_vul_map and vul_type in sig_vul_map[functionB_sig_]:
66 to_remove[f"{file_}!!!{contract_}!!!{functionA_}!!!{functionB_sig_}!!!{vul_type}"] = True
67 logger.info(f"Remove the redundant result: {file_}!!!{contract_}!!!{functionA_}!!!{functionB_sig_}!!!{vul_type}")
68
69 # remove the redundant result
70 for file_, file_data_ in origin_output.copy().items():
71 for contract_, contract_data_ in file_data_.copy().items():
72 for functionA_, functionA_data_ in contract_data_.copy().items():
73 for functionB_sig_, functionB_data_ in functionA_data_.copy().items():
74 if f"{file_}!!!{contract_}!!!{functionA_}!!!{functionB_sig_}!!!{vul_type}" in to_remove:
75 origin_output[file_][contract_][functionA_].pop(functionB_sig_)
76
77 return origin_output
78
79
80def convert_output(origin_output:Dict, scan_rules:List[Dict], cg:CallGraph, base_dir:str) -> Dict:

Callers 1

convert_outputFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected