aboutsummaryrefslogtreecommitdiff
path: root/vendor/google.golang.org/grpc/metadata/metadata.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/google.golang.org/grpc/metadata/metadata.go')
-rw-r--r--vendor/google.golang.org/grpc/metadata/metadata.go14
1 files changed, 10 insertions, 4 deletions
diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go
index 52070db..954c0f7 100644
--- a/vendor/google.golang.org/grpc/metadata/metadata.go
+++ b/vendor/google.golang.org/grpc/metadata/metadata.go
@@ -60,15 +60,21 @@ func encodeKeyValue(k, v string) (string, string) {
// DecodeKeyValue returns the original key and value corresponding to the
// encoded data in k, v.
+// If k is a binary header and v contains comma, v is split on comma before decoded,
+// and the decoded v will be joined with comma before returned.
func DecodeKeyValue(k, v string) (string, string, error) {
if !strings.HasSuffix(k, binHdrSuffix) {
return k, v, nil
}
- val, err := base64.StdEncoding.DecodeString(v)
- if err != nil {
- return "", "", err
+ vvs := strings.Split(v, ",")
+ for i, vv := range vvs {
+ val, err := base64.StdEncoding.DecodeString(vv)
+ if err != nil {
+ return "", "", err
+ }
+ vvs[i] = string(val)
}
- return k, string(val), nil
+ return k, strings.Join(vvs, ","), nil
}
// MD is a mapping from metadata keys to values. Users should use the following