diff --git a/proto/table_marshal.go b/proto/table_marshal.go index db9927a0c7..591c957885 100644 --- a/proto/table_marshal.go +++ b/proto/table_marshal.go @@ -2936,7 +2936,7 @@ func Size(pb Message) int { func Marshal(pb Message) ([]byte, error) { if m, ok := pb.(newMarshaler); ok { siz := m.XXX_Size() - b := make([]byte, 0, siz) + b := make([]byte, siz) return m.XXX_Marshal(b, false) } if m, ok := pb.(Marshaler); ok { @@ -2969,6 +2969,7 @@ func (p *Buffer) Marshal(pb Message) error { if m, ok := pb.(newMarshaler); ok { siz := m.XXX_Size() p.grow(siz) // make sure buf has enough capacity + p.buf = p.buf[:siz] p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) return err } diff --git a/protoc-gen-gogo/generator/generator.go b/protoc-gen-gogo/generator/generator.go index dd260f142c..5ae25de1b0 100644 --- a/protoc-gen-gogo/generator/generator.go +++ b/protoc-gen-gogo/generator/generator.go @@ -2717,7 +2717,7 @@ func (g *Generator) generateCommonMethods(mc *msgCtx) { if gogoproto.IsMarshaler(g.file.FileDescriptorProto, mc.message.DescriptorProto) || gogoproto.IsUnsafeMarshaler(g.file.FileDescriptorProto, mc.message.DescriptorProto) { if gogoproto.IsStableMarshaler(g.file.FileDescriptorProto, mc.message.DescriptorProto) { - g.P("b = b[:cap(b)]") + g.P("b = b[:len(b)]") g.P("n, err := m.MarshalToSizedBuffer(b)") g.P("if err != nil {") g.In() @@ -2731,7 +2731,7 @@ func (g *Generator) generateCommonMethods(mc *msgCtx) { g.P("return xxx_messageInfo_", mc.goName, ".Marshal(b, m, deterministic)") g.P("} else {") g.In() - g.P("b = b[:cap(b)]") + g.P("b = b[:len(b)]") g.P("n, err := m.MarshalToSizedBuffer(b)") g.P("if err != nil {") g.In() diff --git a/test/protobuffer/protobuffer.pb.go b/test/protobuffer/protobuffer.pb.go index ae8df3a673..06c55b7ac8 100644 --- a/test/protobuffer/protobuffer.pb.go +++ b/test/protobuffer/protobuffer.pb.go @@ -89,7 +89,7 @@ func (m *PBuffMarshaler) XXX_Marshal(b []byte, deterministic bool) ([]byte, erro if deterministic { return xxx_messageInfo_PBuffMarshaler.Marshal(b, m, deterministic) } else { - b = b[:cap(b)] + b = b[:len(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err