Skip to content

Commit a3c0ba9

Browse files
ChristopherHXrichmahn
authored andcommitted
Harden runner updateTask and updateLog api (#32462)
Per proposal go-gitea/gitea#32461
1 parent f4bed18 commit a3c0ba9

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
@@ -175,7 +175,9 @@ func (s *Service) UpdateTask(
175175
ctx context.Context,
176176
req *connect.Request[runnerv1.UpdateTaskRequest],
177177
) (*connect.Response[runnerv1.UpdateTaskResponse], error) {
178-
task, err := actions_model.UpdateTaskByState(ctx, req.Msg.State)
178+
runner := GetRunner(ctx)
179+
180+
task, err := actions_model.UpdateTaskByState(ctx, runner.ID, req.Msg.State)
179181
if err != nil {
180182
return nil, status.Errorf(codes.Internal, "update task: %v", err)
181183
}
@@ -237,11 +239,15 @@ func (s *Service) UpdateLog(
237239
ctx context.Context,
238240
req *connect.Request[runnerv1.UpdateLogRequest],
239241
) (*connect.Response[runnerv1.UpdateLogResponse], error) {
242+
runner := GetRunner(ctx)
243+
240244
res := connect.NewResponse(&runnerv1.UpdateLogResponse{})
241245

242246
task, err := actions_model.GetTaskByID(ctx, req.Msg.TaskId)
243247
if err != nil {
244248
return nil, status.Errorf(codes.Internal, "get task: %v", err)
249+
} else if runner.ID != task.RunnerID {
250+
return nil, status.Errorf(codes.Internal, "invalid runner for task")
245251
}
246252
ack := task.LogLength
247253

0 commit comments

Comments
 (0)