From a82683139d46fca135299bc7c751aa48ea2c58b0 Mon Sep 17 00:00:00 2001 From: 0xGusMcCrae <0xGusMcCrae@protonmail.com> Date: Fri, 2 Jun 2023 16:12:24 -0400 Subject: [PATCH 1/4] initial optimization --- slither/detectors/variables/similar_variables.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/slither/detectors/variables/similar_variables.py b/slither/detectors/variables/similar_variables.py index 465e1ce01d..5db9552411 100644 --- a/slither/detectors/variables/similar_variables.py +++ b/slither/detectors/variables/similar_variables.py @@ -47,9 +47,7 @@ def similar(seq1: str, seq2: str) -> bool: Returns: bool: true if names are similar """ - if len(seq1) != len(seq2): - return False - val = difflib.SequenceMatcher(a=seq1.lower(), b=seq2.lower()).ratio() + val = difflib.SequenceMatcher(a=seq1, b=seq2).ratio() ret = val > 0.90 return ret @@ -69,11 +67,15 @@ def detect_sim(contract: Contract) -> Set[Tuple[LocalVariable, LocalVariable]]: ret = [] for v1 in all_var: + _len_v1 = len(v1.name) for v2 in all_var: - if v1.name.lower() != v2.name.lower(): - if SimilarVarsDetection.similar(v1.name, v2.name): - if (v2, v1) not in ret: - ret.append((v1, v2)) + if _len_v1 != len(v2.name): + continue + _v1_name_lower = v1.name.lower() + _v2_name_lower = v2.name.lower() + if _v1_name_lower != _v2_name_lower: + if SimilarVarsDetection.similar(_v1_name_lower, _v2_name_lower): + ret.append((v1, v2)) return set(ret) From 1b4c0b913727ff6306db9e6f7bb9a4cf0ff900c3 Mon Sep 17 00:00:00 2001 From: 0xGusMcCrae <0xGusMcCrae@protonmail.com> Date: Fri, 2 Jun 2023 18:07:45 -0400 Subject: [PATCH 2/4] reduced num iterations in inner loop --- slither/detectors/variables/similar_variables.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/slither/detectors/variables/similar_variables.py b/slither/detectors/variables/similar_variables.py index 5db9552411..8bd5b93d7c 100644 --- a/slither/detectors/variables/similar_variables.py +++ b/slither/detectors/variables/similar_variables.py @@ -63,12 +63,14 @@ def detect_sim(contract: Contract) -> Set[Tuple[LocalVariable, LocalVariable]]: contract_var = contract.variables - all_var = set(all_var + contract_var) + all_var = list(set(all_var + contract_var)) ret = [] - for v1 in all_var: + for i in range(len(all_var)): + v1 = all_var[i] _len_v1 = len(v1.name) - for v2 in all_var: + for j in range(i,len(all_var)): + v2 = all_var[j] if _len_v1 != len(v2.name): continue _v1_name_lower = v1.name.lower() From 15e8ce9e330df30090a5ce82c1fbef0491ee6f1d Mon Sep 17 00:00:00 2001 From: 0xGusMcCrae <0xGusMcCrae@protonmail.com> Date: Sat, 3 Jun 2023 07:15:57 -0400 Subject: [PATCH 3/4] remove changes to how similar() works --- .../detectors/variables/similar_variables.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/slither/detectors/variables/similar_variables.py b/slither/detectors/variables/similar_variables.py index 8bd5b93d7c..7cb10cbd54 100644 --- a/slither/detectors/variables/similar_variables.py +++ b/slither/detectors/variables/similar_variables.py @@ -47,7 +47,9 @@ def similar(seq1: str, seq2: str) -> bool: Returns: bool: true if names are similar """ - val = difflib.SequenceMatcher(a=seq1, b=seq2).ratio() + if len(seq1) != len(seq2): + return False + val = difflib.SequenceMatcher(a=seq1.lower(), b=seq2.lower()).ratio() ret = val > 0.90 return ret @@ -68,16 +70,13 @@ def detect_sim(contract: Contract) -> Set[Tuple[LocalVariable, LocalVariable]]: ret = [] for i in range(len(all_var)): v1 = all_var[i] - _len_v1 = len(v1.name) - for j in range(i,len(all_var)): + _v1_name_lower = v1.name.lower() + for j in range(i,len(all_var)): v2 = all_var[j] - if _len_v1 != len(v2.name): - continue - _v1_name_lower = v1.name.lower() - _v2_name_lower = v2.name.lower() - if _v1_name_lower != _v2_name_lower: - if SimilarVarsDetection.similar(_v1_name_lower, _v2_name_lower): - ret.append((v1, v2)) + if _v1_name_lower != v2.name.lower(): + if SimilarVarsDetection.similar(v1.name, v2.name): + if (v2, v1) not in ret: + ret.append((v1, v2)) return set(ret) From 173698d8e0b598ad2a79e5eab20db48bf601d898 Mon Sep 17 00:00:00 2001 From: 0xGusMcCrae <0xGusMcCrae@protonmail.com> Date: Sat, 3 Jun 2023 11:55:54 -0400 Subject: [PATCH 4/4] linting --- slither/detectors/variables/similar_variables.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slither/detectors/variables/similar_variables.py b/slither/detectors/variables/similar_variables.py index 7cb10cbd54..9f8eaaa2d5 100644 --- a/slither/detectors/variables/similar_variables.py +++ b/slither/detectors/variables/similar_variables.py @@ -68,10 +68,11 @@ def detect_sim(contract: Contract) -> Set[Tuple[LocalVariable, LocalVariable]]: all_var = list(set(all_var + contract_var)) ret = [] + # pylint: disable=consider-using-enumerate for i in range(len(all_var)): v1 = all_var[i] _v1_name_lower = v1.name.lower() - for j in range(i,len(all_var)): + for j in range(i, len(all_var)): v2 = all_var[j] if _v1_name_lower != v2.name.lower(): if SimilarVarsDetection.similar(v1.name, v2.name):