diff --git a/dmoj/cptbox/tracer.py b/dmoj/cptbox/tracer.py index 53e63fb2d..b1c4847ce 100644 --- a/dmoj/cptbox/tracer.py +++ b/dmoj/cptbox/tracer.py @@ -30,7 +30,6 @@ _SYSCALL_INDICIES[PTBOX_ABI_ARM64] = 5 FREEBSD = sys.platform.startswith('freebsd') -BAD_SECCOMP = sys.platform == 'linux' and tuple(map(int, os.uname().release.partition('-')[0].split('.'))) < (4, 8) _address_bits = { PTBOX_ABI_X86: 32, @@ -44,6 +43,23 @@ HandlerCallback = Callable[[Debugger], bool] +def is_bad_seccomp() -> bool: + try: + version_parts = os.uname().release.partition('-')[0].split('.') + clean_parts = [] + for part in version_parts: + clean_part = ''.join(c for c in part if c.isdigit()) + if clean_part: + clean_parts.append(int(clean_part)) + return sys.platform == 'linux' and tuple(clean_parts) < (4, 8) + except (ValueError, IndexError): + # Default to assuming bad seccomp if we can't parse + return True + + +BAD_SECCOMP = is_bad_seccomp() + + class MaxLengthExceeded(ValueError): pass diff --git a/dmoj/executors/autoconfig.py b/dmoj/executors/autoconfig.py index f65db2b6f..f4435d9e4 100644 --- a/dmoj/executors/autoconfig.py +++ b/dmoj/executors/autoconfig.py @@ -60,9 +60,11 @@ def main(): else: if not args.silent: print_ansi( - f'#ansi[{feedback or "Success"}](green|bold)' - if success - else f'#ansi[{feedback or "Failed"}](red|bold)', + ( + f'#ansi[{feedback or "Success"}](green|bold)' + if success + else f'#ansi[{feedback or "Failed"}](red|bold)' + ), file=sys.stderr, ) diff --git a/dmoj/tests/test_int_patch.py b/dmoj/tests/test_int_patch.py index 38f01e97c..cd95f0b01 100644 --- a/dmoj/tests/test_int_patch.py +++ b/dmoj/tests/test_int_patch.py @@ -63,6 +63,4 @@ def test_parse_string_long(self): def test_parse_int(self): self.assertEqual(int(1), 1) self.assertEqual(int(-1337), -1337) - self.assertEqual( - int(10**builtin_int_patch.INT_MAX_NUMBER_DIGITS), 10**builtin_int_patch.INT_MAX_NUMBER_DIGITS - ) + self.assertEqual(int(10**builtin_int_patch.INT_MAX_NUMBER_DIGITS), 10**builtin_int_patch.INT_MAX_NUMBER_DIGITS)