diff --git a/dmoj/executors/NODEJS.py b/dmoj/executors/NODEJS.py index a076fdc24..fdd3ee810 100644 --- a/dmoj/executors/NODEJS.py +++ b/dmoj/executors/NODEJS.py @@ -1,10 +1,14 @@ from dmoj.executors.script_executor import ScriptExecutor +from dmoj.cptbox.filesystem_policies import ExactFile + class Executor(ScriptExecutor): ext = 'js' command = 'node' + nproc = -1 command_paths = ['node', 'nodejs'] syscalls = [ + # Start syscalls copied from COFFEE.py 'capget', 'eventfd2', 'newselect', @@ -12,23 +16,29 @@ class Executor(ScriptExecutor): 'select', 'setrlimit', 'statx', + # End syscalls copied from COFFEE.py + + # Without this, we get + # > Protection fault on: 425 (sys_io_uring_setup) + 'io_uring_setup', + # Without this, when running an actual test case (though not the + # self-test), we get + # > RTE (shutdown syscall disallowed) + 'shutdown' ] address_grace = 1048576 test_program = """ -process.stdin.resume(); -process.stdin.setEncoding('utf-8'); - -let inputString = ''; - -process.stdin.on('data', function(inputStdin) { - inputString += inputStdin; -}); - -process.stdin.on('end', function() { - process.stdout.write(inputString); +process.stdin.on('readable', () => { + const chunk = process.stdin.read(); + if (chunk != null) { + process.stdout.write(chunk); + } }); """ + def get_fs(self): + return super().get_fs() + [ExactFile('/usr/lib/ssl/openssl.cnf')] + @classmethod def get_version_flags(cls, command): return ['--version']