diff --git a/internal/config/LoadWorker.go b/internal/config/LoadWorker.go index 0aabd74..0a1dd74 100644 --- a/internal/config/LoadWorker.go +++ b/internal/config/LoadWorker.go @@ -10,6 +10,7 @@ type LimitConfig struct { Cpu float32 Memory int Time float32 + Size int } type WorkerConfig struct { @@ -28,6 +29,7 @@ func LoadWorker(configFile string) *WorkerConfig { v.SetDefault("limit.cpu", 1.0) v.SetDefault("limit.time", 10.0) v.SetDefault("limit.memory", 512*1024) + v.SetDefault("limit.size", 1024) v.SetDefault("process", 1) v.SetDefault("name", "default name") v.SetDefault("compilerimage", "cpp_gcc-latest:latest") diff --git a/internal/worker/RunCppTask.go b/internal/worker/RunCppTask.go index 34edb9a..7ed7508 100644 --- a/internal/worker/RunCppTask.go +++ b/internal/worker/RunCppTask.go @@ -64,6 +64,7 @@ func compileCpp(ctx context.Context, task *model.Paste, cli *client.Client, tmpD // Read compilation log if logData, err := os.ReadFile(filepath.Join(tmpDir, "compile.txt")); err == nil { + logData = logData[:min(len(logData), cfg.Limit.Size)] task.CompileLog = string(logData) } @@ -144,18 +145,20 @@ func runCpp(ctx context.Context, task *model.Paste, cli *client.Client, tmpDir s usagePath := filepath.Join(tmpDir, "usage.json") // Read program output - if outData, err := os.ReadFile(stdoutPath); err == nil { - task.Stdout = string(outData) + if stdoutData, err := os.ReadFile(stdoutPath); err == nil { + stdoutData = stdoutData[:min(len(stdoutData), cfg.Limit.Size)] + task.Stdout = string(stdoutData) } - if outData, err := os.ReadFile(stderrPath); err == nil { - task.Stderr = string(outData) + if stderrData, err := os.ReadFile(stderrPath); err == nil { + stderrData = stderrData[:min(len(stderrData), cfg.Limit.Size)] + task.Stderr = string(stderrData) } if usageData, err := os.ReadFile(usagePath); err == nil { var usage Usage fmt.Println(string(usageData)) fmt.Println(json.Unmarshal(usageData, &usage)) task.MemoryUsageKb = int(usage.MaxMemory) - task.ExecutionTimeMs = int(usage.RealTime * 1000) + task.ExecutionTimeMs = int(usage.RealTime * 1000) } return nil }