Skip to content

DMOJ Judge v3.0.1

Compare
Choose a tag to compare
@Xyene Xyene released this 28 Feb 01:26
· 434 commits to master since this release

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 to malloc)

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