Skip to content

Commit

Permalink
Make trace.py handle invalid TraceLine* configuration parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
skoolkid committed Jul 13, 2024
1 parent ae045ff commit 2775d53
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
7 changes: 6 additions & 1 deletion skoolkit/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ def run(self, start, stop, max_operations, max_tstates, interrupts, trace_line,
else:
max_time = 0
if trace_line:
trace_line = get_trace_line(trace_line)
r = Registers(registers)

if hasattr(simulator, 'trace'): # pragma: no cover
Expand Down Expand Up @@ -248,6 +247,12 @@ def run(snafile, options, config):
trace_operand = config['TraceOperand' + ('', 'Decimal')[options.decimal]]
prefix, byte_fmt, word_fmt = (trace_operand + ',' * (2 - trace_operand.count(','))).split(',')[:3]
begin = time.time()
if trace_line:
orig_trace_line, trace_line = trace_line, get_trace_line(trace_line)
try:
trace_line.format(pc=0, i='.', r=Registers(simulator.registers), t=0, m=simulator.memory)
except Exception as e:
raise SkoolKitError(f"Invalid format string: '{orig_trace_line}'")
tracer.run(start, options.stop, options.max_operations, options.max_tstates,
options.interrupts, trace_line, prefix, byte_fmt, word_fmt)
rt = time.time() - begin
Expand Down
32 changes: 32 additions & 0 deletions tests/test_trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -2049,6 +2049,14 @@ def test_config_TraceLine_with_memory_contents(self):
"""
self.assertEqual(dedent(exp_output).strip(), output.rstrip())

def test_config_TraceLine_bad_values(self):
self._test_bad_spec('-I TraceLine={q} -vm 1', "Invalid format string: '{q}'")
self._test_bad_spec('-I TraceLine={q -vm 1', "Invalid format string: '{q'")
self._test_bad_spec('-I TraceLine=q} -vm 1', "Invalid format string: 'q}'")
self._test_bad_spec('-I TraceLine={m[65536]} -vm 1', "Invalid format string: '{m[65536]}'")
self._test_bad_spec('-I TraceLine={m[$10000]} -vm 1', "Invalid format string: '{m[$10000]}'")
self._test_bad_spec('-I TraceLine={m[0x10000]} -vm 1', "Invalid format string: '{m[0x10000]}'")

def test_config_TraceLine2_read_from_file(self):
ini = """
[trace]
Expand Down Expand Up @@ -2110,6 +2118,14 @@ def test_config_TraceLine2_with_memory_contents(self):
"""
self.assertEqual(dedent(exp_output).strip(), output.rstrip())

def test_config_TraceLine2_bad_values(self):
self._test_bad_spec('-I TraceLine2={q} -vvm 1', "Invalid format string: '{q}'")
self._test_bad_spec('-I TraceLine2={q -vvm 1', "Invalid format string: '{q'")
self._test_bad_spec('-I TraceLine2=q} -vvm 1', "Invalid format string: 'q}'")
self._test_bad_spec('-I TraceLine2={m[65536]} -vvm 1', "Invalid format string: '{m[65536]}'")
self._test_bad_spec('-I TraceLine2={m[$10000]} -vvm 1', "Invalid format string: '{m[$10000]}'")
self._test_bad_spec('-I TraceLine2={m[0x10000]} -vvm 1', "Invalid format string: '{m[0x10000]}'")

def test_config_TraceLineDecimal_read_from_file(self):
ini = """
[trace]
Expand Down Expand Up @@ -2169,6 +2185,14 @@ def test_config_TraceLineDecimal_with_memory_contents(self):
"""
self.assertEqual(dedent(exp_output).strip(), output.rstrip())

def test_config_TraceLineDecimal_bad_values(self):
self._test_bad_spec('-I TraceLineDecimal={q} -Dvm 1', "Invalid format string: '{q}'")
self._test_bad_spec('-I TraceLineDecimal={q -Dvm 1', "Invalid format string: '{q'")
self._test_bad_spec('-I TraceLineDecimal=q} -Dvm 1', "Invalid format string: 'q}'")
self._test_bad_spec('-I TraceLineDecimal={m[65536]} -Dvm 1', "Invalid format string: '{m[65536]}'")
self._test_bad_spec('-I TraceLineDecimal={m[$10000]} -Dvm 1', "Invalid format string: '{m[$10000]}'")
self._test_bad_spec('-I TraceLineDecimal={m[0x10000]} -Dvm 1', "Invalid format string: '{m[0x10000]}'")

def test_config_TraceLineDecimal2_read_from_file(self):
ini = """
[trace]
Expand Down Expand Up @@ -2236,6 +2260,14 @@ def test_config_TraceLineDecimal2_with_memory_contents(self):
"""
self.assertEqual(dedent(exp_output).strip(), output.rstrip())

def test_config_TraceLineDecimal2_bad_values(self):
self._test_bad_spec('-I TraceLineDecimal2={q} -Dvvm 1', "Invalid format string: '{q}'")
self._test_bad_spec('-I TraceLineDecimal2={q -Dvvm 1', "Invalid format string: '{q'")
self._test_bad_spec('-I TraceLineDecimal2=q} -Dvvm 1', "Invalid format string: 'q}'")
self._test_bad_spec('-I TraceLineDecimal2={m[65536]} -Dvvm 1', "Invalid format string: '{m[65536]}'")
self._test_bad_spec('-I TraceLineDecimal2={m[$10000]} -Dvvm 1', "Invalid format string: '{m[$10000]}'")
self._test_bad_spec('-I TraceLineDecimal2={m[0x10000]} -Dvvm 1', "Invalid format string: '{m[0x10000]}'")

def test_config_TraceOperand_read_from_file(self):
ini = """
[trace]
Expand Down

0 comments on commit 2775d53

Please sign in to comment.