From 4710476678a10b3737ac3188cb1673b33aade6a7 Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 20 Apr 2021 13:41:20 +0800 Subject: [PATCH] judge: change sandbox memoryMax logic --- packages/hydrojudge/package.json | 2 +- packages/hydrojudge/src/cases.ts | 4 +++- packages/hydrojudge/src/sandbox.ts | 4 +--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index ee6610255..03a546a48 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,7 +1,7 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "2.5.7", + "version": "2.5.8", "main": "package.json", "author": "undefined ", "repository": "https://github.com/hydro-dev/Hydro.git", diff --git a/packages/hydrojudge/src/cases.ts b/packages/hydrojudge/src/cases.ts index 339ee7c6b..ae3eed95f 100644 --- a/packages/hydrojudge/src/cases.ts +++ b/packages/hydrojudge/src/cases.ts @@ -1,7 +1,7 @@ import fs from 'fs-extra'; import path from 'path'; import yaml from 'js-yaml'; -import { sum } from 'lodash'; +import { max, maxBy, sum } from 'lodash'; import readYamlCases, { convertIniConfig } from '@hydrooj/utils/lib/cases'; import { changeErrorType } from '@hydrooj/utils/lib/utils'; import { FormatError, SystemError } from './error'; @@ -187,6 +187,8 @@ function isValidConfig(config) { if (total_time > (getConfig('total_time_limit') || 60) * 1000) { throw new FormatError('Total time limit longer than {0}s. Cancelled.', [+getConfig('total_time_limit') || 60]); } + const memMax = max(config.subtasks.map((subtask) => subtask.memory)); + if (memMax > parseMemoryMB(getConfig('memoryMax'))) throw new FormatError('Memory limit larger than memory_max'); } export default async function readCases(folder: string, cfg: Record = {}, args) { diff --git a/packages/hydrojudge/src/sandbox.ts b/packages/hydrojudge/src/sandbox.ts index 6c066adaf..f6c20beb8 100644 --- a/packages/hydrojudge/src/sandbox.ts +++ b/packages/hydrojudge/src/sandbox.ts @@ -26,13 +26,11 @@ const statusMap = { function proc({ execute = '', time = 16000, - memory = 1024, + memory = parseMemoryMB(getConfig('memoryMax')), process_limit = 32, 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,