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 5901bd75ca
commit 91bd7c536f
No known key found for this signature in database
GPG Key ID: 253A7E508D2D59CD

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 {