From 54e83ec63e1dc0311ee1240584d6adef5a332251 Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Sat, 27 Apr 2024 21:25:21 +0800 Subject: [PATCH] feat: sync with latest woj_sandbox, allow to set write file limit (`RLIMIT_FSIZE`) --- internal/service/runner/problem_config.go | 31 ++++++++++++++--------- internal/service/runner/run_judge.go | 1 + 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/internal/service/runner/problem_config.go b/internal/service/runner/problem_config.go index b6b9298..7e0b77c 100644 --- a/internal/service/runner/problem_config.go +++ b/internal/service/runner/problem_config.go @@ -22,26 +22,30 @@ var ( ) type ConfigRuntime struct { - TimeLimit int `json:"TimeLimit"` // in ms - MemoryLimit int `json:"MemoryLimit"` // in mb - NProcLimit int `json:"NProcLimit"` + TimeLimit int `json:"TimeLimit"` // in ms + MemoryLimit int `json:"MemoryLimit"` // in mb + NProcLimit int `json:"NProcLimit"` + WriteFileLimit int `json:"WriteFileLimit"` // in mb } var ( DefaultPrebuildRuntime = ConfigRuntime{ - TimeLimit: 300000, - MemoryLimit: 256, - NProcLimit: 64, + TimeLimit: 300000, + MemoryLimit: 256, + NProcLimit: 64, + WriteFileLimit: 1, } DefaultCompileRuntime = ConfigRuntime{ - TimeLimit: 60000, - MemoryLimit: 256, - NProcLimit: 64, + TimeLimit: 60000, + MemoryLimit: 256, + NProcLimit: 64, + WriteFileLimit: 64, } DefaultCheckRuntime = ConfigRuntime{ - TimeLimit: 60000, - MemoryLimit: 128, - NProcLimit: 64, + TimeLimit: 60000, + MemoryLimit: 128, + NProcLimit: 64, + WriteFileLimit: 16, } ) @@ -55,6 +59,9 @@ func (c *ConfigRuntime) Validate() error { if c.NProcLimit <= 0 { return errors.New("nproc limit <= 0") } + if c.WriteFileLimit <= 0 { + return errors.New("write file limit <= 0") + } return nil } diff --git a/internal/service/runner/run_judge.go b/internal/service/runner/run_judge.go index 883c77d..7725d24 100644 --- a/internal/service/runner/run_judge.go +++ b/internal/service/runner/run_judge.go @@ -25,6 +25,7 @@ func (s *service) SandboxArgsBuilder(meta *JudgeMeta, id int) string { args = append(args, fmt.Sprintf("--memory_limit=%d", meta.Cfg.Lang.Runtime.Run.MemoryLimit)) args = append(args, fmt.Sprintf("--nproc_limit=%d", meta.Cfg.Lang.Runtime.Run.NProcLimit)) args = append(args, fmt.Sprintf("--time_limit=%d", meta.Cfg.Lang.Runtime.Run.TimeLimit)) + args = append(args, fmt.Sprintf("--fsize_limit=%d", meta.Cfg.Lang.Runtime.Run.WriteFileLimit)) args = append(args, fmt.Sprintf("--sandbox_template=%s", meta.Cfg.Lang.Lang)) args = append(args, fmt.Sprintf("--sandbox_action=%s", "ret")) args = append(args, fmt.Sprintf("--uid=%d", 1000))