diff --git a/pkg/runtime/types_proto.go b/pkg/runtime/types_proto.go index 4bb4d8ec805..142dd05daaa 100644 --- a/pkg/runtime/types_proto.go +++ b/pkg/runtime/types_proto.go @@ -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 }