From f5cf3b9fa700d1c409c619a348c951ff1e04f9f3 Mon Sep 17 00:00:00 2001 From: Simone Gotti Date: Mon, 29 Apr 2019 10:12:34 +0200 Subject: [PATCH] runservice: check changegroup name --- .../services/runservice/scheduler/store/store.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/internal/services/runservice/scheduler/store/store.go b/internal/services/runservice/scheduler/store/store.go index 8de0a32..3778ea2 100644 --- a/internal/services/runservice/scheduler/store/store.go +++ b/internal/services/runservice/scheduler/store/store.go @@ -33,6 +33,10 @@ import ( etcdclientv3 "go.etcd.io/etcd/clientv3" ) +const ( + MaxChangegroupNameLength = 256 +) + func OSTSubGroupsAndGroupTypes(group string) []string { h := util.PathHierarchy(group) if len(h)%2 != 1 { @@ -388,6 +392,18 @@ func GetRun(ctx context.Context, e *etcd.Store, runID string) (*types.Run, int64 } func AtomicPutRun(ctx context.Context, e *etcd.Store, r *types.Run, runEvent *common.RunEvent, cgt *types.ChangeGroupsUpdateToken) (*types.Run, error) { + // check changegroups name + if cgt != nil { + for cgName := range cgt.ChangeGroupsRevisions { + if strings.Contains(cgName, "/") { + return nil, fmt.Errorf(`changegroup name %q must not contain "/"`, cgName) + } + if len(cgName) > MaxChangegroupNameLength { + return nil, fmt.Errorf("changegroup name %q too long", cgName) + } + } + } + // insert only if the run as changed curRun, _, err := GetRun(ctx, e, r.ID) if err != nil && err != etcd.ErrKeyNotFound {