Merge pull request #25436 from smarterclayton/defend_proto

Add a defensive sanity check to protobuf marshal
This commit is contained in:
Jeff Lowdermilk
2016-05-13 10:45:58 -07:00

View File

@@ -16,6 +16,10 @@ limitations under the License.
package runtime
import (
"fmt"
)
type ProtobufMarshaller interface {
MarshalTo(data []byte) (int, error)
}
@@ -44,6 +48,11 @@ func (m *Unknown) NestedMarshalTo(data []byte, b ProtobufMarshaller, size uint64
if err != nil {
return 0, err
}
if uint64(n2) != size {
// programmer error: the Size() method for protobuf does not match the results of MarshalTo, which means the proto
// struct returned would be wrong.
return 0, fmt.Errorf("the Size() value of %T was %d, but NestedMarshalTo wrote %d bytes to data", b, size, n2)
}
i += n2
}