diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index 3df5197eb..85644af3a 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,7 +1,7 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "2.8.5", + "version": "2.8.6", "main": "package.json", "author": "undefined ", "repository": "https://github.com/hydro-dev/Hydro.git", diff --git a/packages/hydrojudge/src/checkers.ts b/packages/hydrojudge/src/checkers.ts index ceb6a79d8..f18dcb080 100644 --- a/packages/hydrojudge/src/checkers.ts +++ b/packages/hydrojudge/src/checkers.ts @@ -189,7 +189,7 @@ const checkers: Record = { return { status: STATUS.STATUS_SYSTEM_ERROR, score: 0, - message: '', + message: stderr, }; } return parse(stderr, config.score); diff --git a/packages/hydrojudge/src/judge/interactive.ts b/packages/hydrojudge/src/judge/interactive.ts index e6b62a087..0d9aa3fec 100644 --- a/packages/hydrojudge/src/judge/interactive.ts +++ b/packages/hydrojudge/src/judge/interactive.ts @@ -41,15 +41,16 @@ function judgeCase(c) { status = STATUS.STATUS_TIME_LIMIT_EXCEEDED; } else if (memory_usage_kb > ctxSubtask.subtask.memory * 1024) { status = STATUS.STATUS_MEMORY_LIMIT_EXCEEDED; - } else if (code) { + } else if (code !== 13/* Broken Pipe */ || (code === 13 && !resInteractor.code)) { status = STATUS.STATUS_RUNTIME_ERROR; if (code < 32) message = signals[code]; else message = { message: 'Your program returned {0}.', params: [code] }; } else { - const result = parse(resInteractor.files.stderr, ctx.config.score); + const result = parse(resInteractor.stderr, ctxSubtask.subtask.score); status = result.status; score = result.score; message = result.message; + if (resInteractor.code) message += ` (Interactor exited with code ${resInteractor.code})`; } ctxSubtask.score = Score[ctxSubtask.subtask.type](ctxSubtask.score, score); ctxSubtask.status = Math.max(ctxSubtask.status, status); @@ -59,7 +60,7 @@ function judgeCase(c) { status: STATUS.STATUS_JUDGING, case: { status, - score: 0, + score, time_ms: time_usage_ms, memory_kb: memory_usage_kb, message, diff --git a/packages/hydrojudge/src/sandbox.ts b/packages/hydrojudge/src/sandbox.ts index 1f3c84e0b..4d1c57950 100644 --- a/packages/hydrojudge/src/sandbox.ts +++ b/packages/hydrojudge/src/sandbox.ts @@ -68,8 +68,8 @@ async function adaptResult(result, params) { ret.fileIds = result.fileIds || {}; if (params.stdout) await fs.writeFile(params.stdout, ret.files.stdout || ''); else ret.stdout = ret.files.stdout || ''; - if (params.stderr) await fs.writeFile(params.stderr, ret.files.stderr || ''); - else ret.stderr = ret.files.stderr || ''; + if (params.stderr) await fs.writeFile(params.stderr, ret.files.stderr || result.error || ''); + else ret.stderr = ret.files.stderr || result.error || ''; if (result.error) ret.error = result.error; return ret; }