DMOJ Judge v3.0.1
This major release contains a number of features and stability improvements. Upgrading from 2.1.0 is strongly recommended, as the sandbox in 2.1.0 is ineffective for x86 processes running on x64 systems. (In practice, this means the NASM, GAS32, and Turing executors are unsafe.)
The full changelog is available here.
Note: release v3.0.0 was skipped due to a packaging error.
Features
- C++20 support
- Java 15 support
- Rewritten judge core: judge now spins off a temporary worker process per submission
- Fixes heap memory "leak" due to glibc arena fragmentation
- Bad custom checkers / interactors now timed out after 60 seconds
- Robust against worker failures
- Rewritten sandbox
- Much more robust ABI detection
- Numerous fixes in error paths
Sandbox
- Fix sandboxing issues with x86-on-x64 when running without seccomp
- Wrap JVM-based executors in cptbox, rather than relying only on security policies
- Patch
int(...)
to avoid DOS attacks in custom checkers - Allow all syscalls before first
execve
(fixes "failed to set up seccomp policy" errors when seccomp tries tomalloc
)
Runtimes
- Racket: allow
~/.local/share/racket
; #786 - Rust: allow
poll
; #785 - Rust: strip binaries to lower memory overhead
- Go: increase
data_grace
; #756 - Go: use subdirectory for cache; #770
- ASM: time out compilations
- Java: allow single-digit runtime version formatting
- Globally allow
clock_gettime64
- Globally allow
poll
; #785
Miscellaneous
- Numerous fixes and improvements to bridged checker and interactor support
- Set output length to 0 for siggraded problems
- Signature grade in submitted language, rather than always C++
- Disallow abort when nothing is running; #721
- Kill the judging submission on keyboard interrupt in CLI; #700
- Add persistent command history storage for CLI; #702