0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-12-08 15:45:27 +01:00

Safely handle map deletions in refreshAccesses to avoid iteration issues

This commit is contained in:
Ross Golder 2025-10-24 06:01:57 +07:00
parent f600226a04
commit 7d46b0969a
3 changed files with 23 additions and 3 deletions

View File

@ -105,8 +105,10 @@ func refreshAccesses(ctx context.Context, repo *repo_model.Repository, accessMap
}
newAccesses := make([]Access, 0, len(accessMap))
keysToDelete := []int64{}
for userID, ua := range accessMap {
if ua.Mode < minMode && !ua.User.IsRestricted {
keysToDelete = append(keysToDelete, userID)
continue
}
@ -116,6 +118,9 @@ func refreshAccesses(ctx context.Context, repo *repo_model.Repository, accessMap
Mode: ua.Mode,
})
}
for _, uid := range keysToDelete {
delete(accessMap, uid)
}
// Delete old accesses and insert new ones for repository.
if _, err = db.DeleteByBean(ctx, &Access{RepoID: repo.ID}); err != nil {

View File

@ -726,9 +726,24 @@ func GetWorkflowRunLogsStream(ctx *context.APIContext) {
return
}
jobID := ctx.FormInt64("job_id")
jobIndex := int64(0)
if ctx.FormInt("job") > 0 {
jobIndex = int64(ctx.FormInt("job"))
if jobID > 0 {
jobs, err := getRunJobsByRunID(ctx, runID)
if err != nil {
ctx.APIErrorInternal(err)
return
}
for i, j := range jobs {
if j.ID == jobID {
jobIndex = int64(i)
break
}
}
if jobIndex == 0 && jobID > 0 {
ctx.APIError(404, "Job not found")
return
}
}
// Parse log cursors from request body

View File

@ -16,7 +16,7 @@ import (
"strconv"
"strings"
"code.gitea.io/gitea/build/codeformat"
"code.gitea.io/gitea/tools/codeformat"
)
// Windows has a limitation for command line arguments, the size can not exceed 32KB.