Skip to content

Commit 7f51210

Browse files
ChristopherHXearl-warren
authored andcommitted
Harden runner updateTask and updateLog api (#32462)
Per proposal go-gitea/gitea#32461 (cherry picked from commit f888e45432ccb86b18e6709fbd25223e07f2c422)
1 parent dd3c4d7 commit 7f51210

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

models/actions/task.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ func UpdateTask(ctx context.Context, task *ActionTask, cols ...string) error {
341341
// UpdateTaskByState updates the task by the state.
342342
// It will always update the task if the state is not final, even there is no change.
343343
// So it will update ActionTask.Updated to avoid the task being judged as a zombie task.
344-
func UpdateTaskByState(ctx context.Context, state *runnerv1.TaskState) (*ActionTask, error) {
344+
func UpdateTaskByState(ctx context.Context, runnerID int64, state *runnerv1.TaskState) (*ActionTask, error) {
345345
stepStates := map[int64]*runnerv1.StepState{}
346346
for _, v := range state.Steps {
347347
stepStates[v.Id] = v
@@ -360,6 +360,8 @@ func UpdateTaskByState(ctx context.Context, state *runnerv1.TaskState) (*ActionT
360360
return nil, err
361361
} else if !has {
362362
return nil, util.ErrNotExist
363+
} else if runnerID != task.RunnerID {
364+
return nil, fmt.Errorf("invalid runner for task")
363365
}
364366

365367
if task.Status.IsDone() {

routers/api/actions/runner/runner.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,9 @@ func (s *Service) UpdateTask(
177177
ctx context.Context,
178178
req *connect.Request[runnerv1.UpdateTaskRequest],
179179
) (*connect.Response[runnerv1.UpdateTaskResponse], error) {
180-
task, err := actions_model.UpdateTaskByState(ctx, req.Msg.State)
180+
runner := GetRunner(ctx)
181+
182+
task, err := actions_model.UpdateTaskByState(ctx, runner.ID, req.Msg.State)
181183
if err != nil {
182184
return nil, status.Errorf(codes.Internal, "update task: %v", err)
183185
}
@@ -239,11 +241,15 @@ func (s *Service) UpdateLog(
239241
ctx context.Context,
240242
req *connect.Request[runnerv1.UpdateLogRequest],
241243
) (*connect.Response[runnerv1.UpdateLogResponse], error) {
244+
runner := GetRunner(ctx)
245+
242246
res := connect.NewResponse(&runnerv1.UpdateLogResponse{})
243247

244248
task, err := actions_model.GetTaskByID(ctx, req.Msg.TaskId)
245249
if err != nil {
246250
return nil, status.Errorf(codes.Internal, "get task: %v", err)
251+
} else if runner.ID != task.RunnerID {
252+
return nil, status.Errorf(codes.Internal, "invalid runner for task")
247253
}
248254
ack := task.LogLength
249255

0 commit comments

Comments
 (0)