From f24213038232e685d604e046edcad44760b30eff Mon Sep 17 00:00:00 2001 From: MS Date: Sun, 1 Sep 2024 01:37:32 -0400 Subject: [PATCH] Sanitize args for assert in BETA10 (#1095) --- tools/isledecomp/isledecomp/compare/asm/fixes.py | 12 ++++++++++++ tools/isledecomp/isledecomp/compare/core.py | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tools/isledecomp/isledecomp/compare/asm/fixes.py b/tools/isledecomp/isledecomp/compare/asm/fixes.py index bca22681..d0e326da 100644 --- a/tools/isledecomp/isledecomp/compare/asm/fixes.py +++ b/tools/isledecomp/isledecomp/compare/asm/fixes.py @@ -300,3 +300,15 @@ def find_effective_match( ) return corrections.issuperset(recomp_lines_disputed) + + +def assert_fixup(asm: List[Tuple[str, str]]): + """Detect assert calls and replace the code filename and line number + values with macros (from assert.h).""" + for i, (_, line) in enumerate(asm): + if "_assert" in line and line.startswith("call"): + try: + asm[i - 3] = (asm[i - 3][0], "push __LINE__") + asm[i - 2] = (asm[i - 2][0], "push __FILE__") + except IndexError: + continue diff --git a/tools/isledecomp/isledecomp/compare/core.py b/tools/isledecomp/isledecomp/compare/core.py index 8a1fc153..1ba77f27 100644 --- a/tools/isledecomp/isledecomp/compare/core.py +++ b/tools/isledecomp/isledecomp/compare/core.py @@ -13,7 +13,7 @@ from isledecomp.parser import DecompCodebase from isledecomp.dir import walk_source_dir from isledecomp.types import SymbolType from isledecomp.compare.asm import ParseAsm -from isledecomp.compare.asm.fixes import find_effective_match +from isledecomp.compare.asm.fixes import assert_fixup, find_effective_match from .db import CompareDb, MatchInfo from .diff import combined_diff from .lines import LinesDb @@ -661,6 +661,11 @@ class Compare: if self.debug: self._dump_asm(orig_combined, recomp_combined) + # Check for assert calls only if we expect to find them + if self.orig_bin.is_debug or self.recomp_bin.is_debug: + assert_fixup(orig_combined) + assert_fixup(recomp_combined) + # Detach addresses from asm lines for the text diff. orig_asm = [x[1] for x in orig_combined] recomp_asm = [x[1] for x in recomp_combined]