Skip to content

Releases: DMOJ/judge-server

DMOJ Judge v4.1.0

20 Feb 22:14
Compare
Choose a tag to compare

This minor release contains improvements to MLE reporting for a few runtimes, as well as a few bugfixes.

Runtimes

  • Java java.lang.OutOfMemoryError as well as certain GC failures are now mapped to MLE verdicts.
  • Guaranteed that Java, Python 2/3, PyPy 2/3, and C# submissions will report MLE rather than RTE or IR when graded on problems with memory limits lower than baseline runtime overhead.

Bugfixes

  • Fixed a bug where some problem directories specified with problem_storage_globs may not have been picked up.
  • Fixed the C++03 executor relying on the compiler's default standard (which is now C++17 for GCC).

Miscellaneous

  • dmoj-cli now indents batched cases.

Full changelog

The full changelog is available here as well as below.

Changelog

DMOJ Judge v4.0.1

28 Jan 23:13
d96b12b
Compare
Choose a tag to compare

This is a bugfix release, fixing the behavior of problem storage configured through the new problem_storage_globs key.

Full changelog

The full changelog is available here as well as below.

Changelog

DMOJ Judge v4.0.0

22 Jan 23:07
b09fb57
Compare
Choose a tag to compare

This major release contains a number of features, sandboxing improvements, and support for the latest versions of many runtimes. Upgrading is strongly recommended.

Thanks to @Riolku, @kiritofeng, @int-y1 for contributing major changes in this release.

Breaking changes

  • The minimum supported Linux kernel version is now 4.8. Pure ptrace-based sandboxing is no longer supported.
  • Support for running on Python 3.6 has been removed. Python 3.6 was EOL in December 2021.
  • The RUBY2 executor has been renamed to RUBY.
  • All Java executors except for Java 8 have been merged into a single JAVA executor.
  • Support for CoffeeScript (COFFEE executor) has been removed.
  • Tests specified pretest_test_cases are now run unconditionally. See #1068 for more details.
  • The number of digits in submission output that interactors, etc. will be willing to handle has been dropped from 10000 to Python's new sys.int_info.default_max_str_digits limit. See python/cpython#95778 for more details.
  • The Rust edition has been upgraded from 2015 to 2021.

Deprecation notices

  • Problem directories are now specified through a new problem_storage_globs key. problem_storage_root is now deprecated, and will be removed in a future release.
  • This release adds support for batch dependencies, but their functionality will change substantially in a future release. See #1075 for more details.

Runtimes

  • Added support for:
    • Lean 4
    • LLVM IR
    • Java 17-19
    • Go 1.16+
    • Ruby 3
    • OCaml 5.0
  • @int-y1 has implemented an optimizing compiler for Brain**** using LLVM (#1091). This new compiler produces dramatically faster code than the previous implementation.
  • Rust compilation has been greatly sped up by sharing build artifacts between compilations.
  • Fixed Groovy compilation time being included as part of runtime.
  • Tweaked sandbox to allow Go to make use of its transparent hugepage support.
  • Carriage returns are now stripped for the text executor.
  • The time limit for Kotlin compilation has been raised from 20 seconds to 30 seconds.

Sandbox

  • Compilers are now sandboxed. Not sandboxed: renaming, various f* syscalls (e.g. fchmod), execs. The current level of compiler sandboxing is intended to prevent e.g. #include-ing arbitrary files that are readable by the judge user.
  • File access is now denied with EACCES rather than EPERM.
  • Java security policies are no longer used, as they were deprecated in Java 17.
  • Fixed non-fatal signals occasionally being reported to the site (e.g., Haskell's ticker thread sending SIGVTALRM).
  • Added support for FreeBSD 13.

Miscellaneous

  • The judge will now autodetect executors for given source files based on extension. This applies to dmoj-cli submit as well as generators, graders, etc.
  • Fixed judge handshake issues when ~9000 problems are reported at initialization.
  • Fixed leaking cached executor compilation artifacts.
  • Context switches (involuntary + voluntary) are now reported as part of testcase log output.

Full changelog

The full changelog is available here as well as below.

Changelog
Read more

DMOJ Judge v3.0.2

12 Sep 00:11
5fddf1d
Compare
Choose a tag to compare

This is a bugfix release, ahead of the DMOJ judge dropping support for Linux kernels older than 4.8. It is the last release to support ptrace-only sandboxing; future releases will require seccomp-enabled kernels.

The full changelog is available here.

Features

  • Added a problem validation mode to dmoj-cli (#335)
  • Added a linematches checker for problems that reward points based on lines matched

Sandbox

  • File accesses for existing files are now disallowed with EPERM rather than ENOENT
  • File access policies made more strict, and are no longer regex-based (#873)
  • Multi-process sandboxing now functional on WSL 2 systems
  • Unconditional errno returns are now implemented in seccomp rather than ptrace

Runtimes

  • Python: report only builtin exceptions in feedback field
  • Rust: fix initialization error in cargo (1fb0750)
  • Steel Bank Common Lisp: allow thread creation
  • Zig: increase compile time limit

Miscellaneous

  • Feedback for the linecount checker moved into extended feedback
  • Interactors are now unbuffered by default
  • Miscellaneous other small tweaks and bugfixes

DMOJ Judge v3.0.1

28 Feb 01:26
Compare
Choose a tag to compare

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

DMOJ Judge v2.1.0

11 May 20:10
Compare
Choose a tag to compare

This minor release contains a number of features and stability improvements. Upgrading from 2.0.0 is strongly recommended.

The full changelog is available here.

Features

  • Full support for running the judge in Docker
  • New bridged checker for interfacing with e.g. testlib checkers
  • New bridged grader for interfacing with e.g. testlib graders
  • Python: SyntaxError is now mapped to a compilation error, through py_compile
  • New --skip-self-test flag to skip self-tests at startup
  • Support for the Zig programming language (0.6.0) has been added
  • OCaml: compile with JSC Base/Core/Stdio and Zarith
  • Chicken Scheme: add support for Chicken 5

Fixes

Sandbox

  • Properly validate null file paths
  • Reject open requests to overly long paths
  • More robustly reject invalid Unicode with ENOENT and logging
  • Globally allow the pread64 syscall
  • Globally allow PR_SET_THP_DISABLE prctl
  • Wait for process to spawn before returning from TracedPopen constructor, fixing a possible race
  • Adjust OOM score for compilers to maximal badness; #599
  • Adjust OOM score for submissions to maximal badness; #649
  • Hold GIL when spawning submission process; #588

Runtimes

  • ARM GAS: fix when running in ARM64 Docker
  • Ruby 2: allow eventfd2 syscall
  • Ruby 2: support autoconf for Ruby 2.8
  • Java: don't display exception details
  • V8 JavaScript: increase stack limit to 128mb
  • Go: allow package main; #582
  • Go: allow mlock syscall (needed as of go 1.14.1)
  • Mono: allow clock_nanosleep
  • Brain***: better bracket validation; #625
  • COBOL: detect new capitalization formats for error/note/warning; #656
  • Allow C11 to be signature graded
  • Properly suffix extensions in CLI

Others

  • Avoid slow filesystem scans on testcase location resolution (for network-mounted problem directories)
  • Handle MLEs during linking more gracefully by notifying user
  • Limit number of digits interactor accepts; #606
  • Fix TypeError in site when judge sends None case points; #659

Miscellaneous

  • The cptbox sandbox is now built with -O3 and -march=native
  • Syscall list has been updated for Linux 5.6
  • Feedback is no longer processed on TLE/MLE/OLE
  • Multi-judge support has been removed; #654

DMOJ Judge v2.0.0

15 Sep 20:07
00900f8
Compare
Choose a tag to compare

This major release contains a number of stability improvements, and drops support for Windows and Python < 3.6. This release is meant to be used with the DMOJ Site v2.0.0 release.

The full changelog is available here.

Features

  • Add batching of testcase updates, greatly reducing server load in some cases; #408
  • Implement testcase format specifiers, removing the need to specify a test_cases block for problems using standard naming conventions; #262
  • Enable colored compiler output in all languages that support it (not just GCC/Clang); #543
  • Add support for Java 11; #526
  • Inform Java users of missing main(String[] args); #366
  • Add autoconfig for Kotlin and Turing; #551, #559
  • Add autoconfig support for Ruby 2.6

Fixes

  • Exit JVM immediately upon denying a class load; fixes #455
  • Fix SBCL on Debian 10; #552
  • Use bootclasspath in Scala autoconfig; #550
  • Switch to displaying rustc rather than cargo version for Rust; fixes #534
  • Fix compiler error limiting for Clang; fixes #487
  • Fix interactors on binary streams; fixes #485
  • Fix compiler TLE reporting broken in 069d183

Miscellaneous

  • Give generators 30s to compile by default; #503
  • Allow Rust submissions to be compiled in offline mode via a DMOJ_CARGO_OFFLINE environment variable; #561
  • Disable optimization passes for Brainfuck programs, greatly increasing maximum instruction count before hitting a compiler timeout; #549
  • Move ANSI to HTML conversion to site, preventing judges from executing HTML injection; #478

Under the hood

  • mypy types have been added throughout the judge code
  • Lots of code has been cleaned up as a result of removing Python 2 support
  • All supported runtimes are now tested during CI, thanks to a new runtimes-docker Docker image

DMOJ Judge v1.3.0

21 Nov 04:24
Compare
Choose a tag to compare

This minor release includes a number of enhancements as well as some general bugfixes.

Features

  • Add default location for reading judge configuration to ~/.dmojrc, removing need to always pass -c; #330
  • Add protocol support for "Disconnect" and "Terminate" buttons in judge admin; DMOJ/online-judge#696
  • Inform users of abnormal compiler terminations; #312
  • Scale Brain**** cell count with memory limit; #338
  • Add one-off CLI command support; #334

Fixes

  • Java: correctly detect Unicode classnames
  • Haskell: increase optimization
  • Mono C#: prefer mcs over dmcs during autoconfiguration; #333
  • Allow rstripped checker's filter_new_line parameter to be disabled; #343
  • Fix Python 3 compatibility in CLI
  • Add more helpful error message for invalid problem storage root
  • Fix testsuite formatting on Python 3
  • Fix CLI parameter splitting; #351
  • Fix short-circuiting multiple batches; #341
  • Fix cryptic crash when no file executable available; #309
  • Add fallback for Android Python load average being unavailable
  • Forward LD_LIBRARY_PATH if present (for Termux to function)
  • Fix compile output collecting for some languages; #326

DMOJ Judge v1.2.0

22 Apr 02:06
Compare
Choose a tag to compare

This minor release includes a number of enhancements as well as some general bugfixes.

Features

  • Full arm32 and arm64 Linux support; #300
  • Use process_vm_readv when possible
  • Improve Java autoconfig
  • Support picking up new non-leaf directories when nesting problem directories

Fixes

  • Fix startup warning typo
  • Fix NaN handling in floating point checkers
  • Fix *at system call handling
  • Fix GCC/Clang -march flag handling; #303
  • Fix line ending handling in checkers
  • Fix interactive problem TLE getting full credit
  • Disable Nim due to arbitrary code execution; #318
  • Fix java_sandbox.jar not found

DMOJ Judge v1.1.0

09 Dec 22:03
Compare
Choose a tag to compare

This minor release includes a number of enhancements as well as some general bugfixes.

Features

  • Allow dmoj-autoconf to be piped to a file without --silent; #289
  • Drop pty-based unbuffering in favour of LD_PRELOAD setvbuf approach; #243
  • Improve internal error message when init.yml is not found
  • Mark nonzero generator return code as internal error
  • Implement generator sandboxing; #295
    • Generators are sandboxed with 20s TL and 512mb ML by default; configurable
  • Return ENOENT for all invalid file accesses instead of killing process, makes configuration of many runtimes easier; #293
  • PHP and PHP7 executors have been merged into a single PHP executor; #117
  • Implement --verbose flag for dmoj-autoconf

Fixes

  • Fix ptrace(2) failure causing judge hang; #213
  • Fix race in problem update manager; #283
  • Fix AttributeError when exiting dmoj-cli; #291
  • Fix Unicode support for FreeBSD relative path handling
  • Fix bug where generator was being run even if out parameter was specified
  • Fix setup.py sdist failure on Python 3