feat: decode google.protobuf.BytesValue compatible base64.URLEncoding. (#1991)

pull/2000/head
Comolli 3 years ago committed by GitHub
parent ab04490d49
commit ec78198050
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      encoding/form/form_test.go
  2. 4
      encoding/form/proto_decode.go

@ -1,6 +1,7 @@
package form
import (
"encoding/base64"
"reflect"
"testing"
@ -178,3 +179,16 @@ func TestDecodeStructPb(t *testing.T) {
t.Errorf("except %v, got %v", "go-kratos", req.Data.GetFields()["name2"].GetStringValue())
}
}
func TestDecodeBytesValuePb(t *testing.T) {
url := "https://example.com/xx/?a=1&b=2&c=3"
val := base64.URLEncoding.EncodeToString([]byte(url))
content := "bytes=" + val
in2 := &complex.Complex{}
if err := encoding.GetCodec(contentType).Unmarshal([]byte(content), in2); err != nil {
t.Errorf("expect %v, got %v", nil, err)
}
if !reflect.DeepEqual(url, string(in2.Bytes.Value)) {
t.Errorf("except %v, got %v", val, string(in2.Bytes.Value))
}
}

@ -283,7 +283,9 @@ func parseMessage(md protoreflect.MessageDescriptor, value string) (protoreflect
case "google.protobuf.BytesValue":
v, err := base64.StdEncoding.DecodeString(value)
if err != nil {
return protoreflect.Value{}, err
if v, err = base64.URLEncoding.DecodeString(value); err != nil {
return protoreflect.Value{}, err
}
}
msg = wrapperspb.Bytes(v)
case "google.protobuf.FieldMask":

Loading…
Cancel
Save