Skip to content

Commit

Permalink
Issue619safer (#627)
Browse files Browse the repository at this point in the history
* tests. added test case for issue (#619). Compare marshaling between a proto.Buffer and proto.Marshal with different proto.Buffer sizes.

* proto/buffer. added buffer cap adjustment before giving it to marshal. This allows us to marshal at the correct place when the buffer contains a larger backing buffer. (#619)

* proto/buffer. remove unsafe/reflect slice cap adjustment and rather use a full slice expression

* proto/buffer. encode. add issue620 tests here

* proto/buffer encode. removed  unnecessary slicing. (#619)

* proto/buffer.  err check previously ignored error

* issue619. add test package to make regenerate list
  • Loading branch information
jmarais authored Oct 11, 2019
1 parent 8142193 commit 09ab773
Show file tree
Hide file tree
Showing 11 changed files with 806 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Makefile
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ regenerate:
make -C test/issue503 regenerate
make -C test/issue530 regenerate
make -C test/issue617 regenerate
make -C test/issue620 regenerate
make -C test/protobuffer regenerate
make -C test/issue630 regenerate

make gofmt
Expand Down
2 changes: 2 additions & 0 deletions proto/encode.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,8 @@ type Marshaler interface {
// prefixed by a varint-encoded length.
func (p *Buffer) EncodeMessage(pb Message) error {
siz := Size(pb)
sizVar := SizeVarint(uint64(siz))
p.grow(siz + sizVar)
p.EncodeVarint(uint64(siz))
return p.Marshal(pb)
}
Expand Down
4 changes: 3 additions & 1 deletion proto/table_marshal.go
Original file line number Diff line number Diff line change
Expand Up @@ -2969,7 +2969,9 @@ 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, err = m.XXX_Marshal(p.buf, p.deterministic)
pp := p.buf[len(p.buf) : len(p.buf) : len(p.buf)+siz]
pp, err = m.XXX_Marshal(pp, p.deterministic)
p.buf = append(p.buf, pp...)
return err
}
if m, ok := pb.(Marshaler); ok {
Expand Down
31 changes: 31 additions & 0 deletions test/issue620/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Protocol Buffers for Go with Gadgets
#
# Copyright (c) 2019, The GoGo Authors. All rights reserved.
# http://github.com/gogo/protobuf
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

regenerate:
go install github.com/gogo/protobuf/protoc-gen-gogo
protoc --proto_path=../../../../../:../../protobuf/:. --gogo_out=. issue620.proto
229 changes: 229 additions & 0 deletions test/issue620/issue620.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 44 additions & 0 deletions test/issue620/issue620.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2019, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

syntax = "proto2";

package issue620;

import "github.com/gogo/protobuf/gogoproto/gogo.proto";

message Bar {
optional string Field1 = 1;
}

message BarFast {
option (gogoproto.marshaler) = true;
option (gogoproto.sizer) = true;
option (gogoproto.equal) = true;
optional string Field1 = 1;
}
Loading

0 comments on commit 09ab773

Please sign in to comment.