From fc85ead5c1176fffa8e98f24b4665e8048d12e30 Mon Sep 17 00:00:00 2001 From: Arkadiy Tetelman Date: Sun, 1 Jan 2023 10:22:24 -0800 Subject: [PATCH] Some bug fixes for reserved field names and ranges --- pkg/protodump/fixtures/test.proto | 11 +++++++++++ pkg/protodump/proto.go | 22 ++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/pkg/protodump/fixtures/test.proto b/pkg/protodump/fixtures/test.proto index 62fc14b..ee508f7 100644 --- a/pkg/protodump/fixtures/test.proto +++ b/pkg/protodump/fixtures/test.proto @@ -9,6 +9,17 @@ service Greeter { rpc StreamMethodServer (StreamRequest) returns (stream StreamReply) {} } +message Reserved { + reserved "foo"; + reserved 1; + reserved 4 to 7; +} + +message ReservedEnum { + reserved "FOO"; + reserved 10 to max; +} + message HelloRequest { message Test { string blah = 1; diff --git a/pkg/protodump/proto.go b/pkg/protodump/proto.go index 3395926..6db37d0 100644 --- a/pkg/protodump/proto.go +++ b/pkg/protodump/proto.go @@ -6,6 +6,7 @@ import ( "strconv" "strings" + "google.golang.org/protobuf/encoding/protowire" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protodesc" "google.golang.org/protobuf/reflect/protoreflect" @@ -152,23 +153,28 @@ func (pd *ProtoDefinition) writeMessage(message protoreflect.MessageDescriptor) for i := 0; i < message.ReservedNames().Len(); i++ { name := message.ReservedNames().Get(i) - pd.writeIndented("reserved ") + pd.writeIndented("reserved \"") pd.write(string(name)) - pd.write(";\n") + pd.write("\";\n") } for i := 0; i < message.ReservedRanges().Len(); i++ { - reservedRange := message.ReservedRanges().Get(i) pd.writeIndented("reserved ") + reservedRange := message.ReservedRanges().Get(i) + if reservedRange[0] > reservedRange[1] { + reservedRange[1], reservedRange[0] = reservedRange[0], reservedRange[1] + } + reservedRange[1] -= 1 if reservedRange[0] == reservedRange[1] { - pd.write(string(reservedRange[0])) + pd.write(fmt.Sprintf("%d", reservedRange[0])) } else { - if reservedRange[0] > reservedRange[1] { - reservedRange[1], reservedRange[0] = reservedRange[0], reservedRange[1] - } pd.write(fmt.Sprintf("%d", reservedRange[0])) pd.write(" to ") - pd.write(fmt.Sprintf("%d", reservedRange[1])) + if reservedRange[1] == protowire.MaxValidNumber { + pd.write("max") + } else { + pd.write(fmt.Sprintf("%d", reservedRange[1])) + } } pd.write(";\n") }