diff --git a/metadata/metadata.go b/metadata/metadata.go index cf6d1b94781c..d2dbb8518e88 100644 --- a/metadata/metadata.go +++ b/metadata/metadata.go @@ -195,12 +195,22 @@ func FromOutgoingContext(ctx context.Context) (MD, bool) { return nil, false } - mds := make([]MD, 0, len(raw.added)+1) - mds = append(mds, raw.md) - for _, vv := range raw.added { - mds = append(mds, Pairs(vv...)) + out := raw.md.Copy() + for _, added := range raw.added { + if len(added)%2 == 1 { + panic(fmt.Sprintf("metadata: FromOutgoingContext got the odd number of input pairs for metadata: %d", len(added))) + } + + var key string + for i, s := range added { + if i%2 == 0 { + key = strings.ToLower(s) + continue + } + out[key] = append(out[key], s) + } } - return Join(mds...), ok + return out, ok } type rawMD struct {