From a3b1f7e640e1dfdd024e77054692c750f5fe1dac Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 19 Apr 2021 12:34:22 +0800 Subject: [PATCH] judge: add memoryMax limit --- packages/hydrojudge/setting.yaml | 4 ++++ packages/hydrojudge/src/config.ts | 1 + packages/hydrojudge/src/sandbox.ts | 4 +++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/hydrojudge/setting.yaml b/packages/hydrojudge/setting.yaml index c23066ff1..348ee63b5 100644 --- a/packages/hydrojudge/setting.yaml +++ b/packages/hydrojudge/setting.yaml @@ -28,6 +28,10 @@ total_time_limit: name: total_time_limit desc: Total time limit per problem default: 60 +memoryMax: + type: text + name: memoryMax + default: 512m retry_delay_sec: type: number name: retry_delay_sec diff --git a/packages/hydrojudge/src/config.ts b/packages/hydrojudge/src/config.ts index a2ef32c14..fa082da22 100644 --- a/packages/hydrojudge/src/config.ts +++ b/packages/hydrojudge/src/config.ts @@ -14,6 +14,7 @@ let config = { tmp_dir: path.resolve(os.tmpdir(), 'hydro', 'judge'), tmpfs_size: '256m', stdio_size: '32m', + memoryMax: '512m', retry_delay_sec: 15, sandbox_host: 'http://localhost:5050', testcases_max: 100, diff --git a/packages/hydrojudge/src/sandbox.ts b/packages/hydrojudge/src/sandbox.ts index 7da948604..405dbb3ba 100644 --- a/packages/hydrojudge/src/sandbox.ts +++ b/packages/hydrojudge/src/sandbox.ts @@ -2,7 +2,7 @@ import Axios from 'axios'; import fs from 'fs-extra'; import { argv } from 'yargs'; import * as STATUS from './status'; -import { SystemError } from './error'; +import { FormatError, SystemError } from './error'; import { cmd, parseMemoryMB } from './utils'; import { getConfig } from './config'; import { Logger } from './log'; @@ -31,6 +31,8 @@ function proc({ stdin = '', copyIn = {}, copyOut = [], copyOutCached = [], } = {}) { const size = parseMemoryMB(getConfig('stdio_size')); + const memoryMax = parseMemoryMB(getConfig('memoryMax')); + if (memory > memoryMax) throw new FormatError('Memory limit larger than memory_max'); return { args: cmd(execute.replace(/\$\{dir\}/g, '/w')), env,