From 620796528e319ac45d6fa59b624e57d0709b0ffb Mon Sep 17 00:00:00 2001 From: Joshua Humphries Date: Mon, 19 Feb 2018 22:28:26 -0500 Subject: [PATCH] fix nil dereference (#10) --- grpcurl.go | 2 +- grpcurl_test.go | 22 ++++++++++++++++++++++ mk-test-files.sh | 5 ++++- testing/example.proto | 19 +++++++++++++++++++ testing/example.protoset | Bin 0 -> 7701 bytes testing/test.protoset | Bin 7804 -> 2009 bytes 6 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 testing/example.proto create mode 100644 testing/example.protoset diff --git a/grpcurl.go b/grpcurl.go index 1ec147d..5ca72da 100644 --- a/grpcurl.go +++ b/grpcurl.go @@ -99,7 +99,7 @@ func resolveFileDescriptor(unresolved map[string]*descriptor.FileDescriptorProto if !ok { return nil, fmt.Errorf("no descriptor found for %q", filename) } - deps := make([]*desc.FileDescriptor, len(fd.GetDependency())) + deps := make([]*desc.FileDescriptor, 0, len(fd.GetDependency())) for _, dep := range fd.GetDependency() { depFd, err := resolveFileDescriptor(unresolved, resolved, dep) if err != nil { diff --git a/grpcurl_test.go b/grpcurl_test.go index 4e373f8..5322fac 100644 --- a/grpcurl_test.go +++ b/grpcurl_test.go @@ -116,6 +116,28 @@ func TestServerDoesNotSupportReflection(t *testing.T) { } } +func TestProtosetWithImports(t *testing.T) { + sourceProtoset, err := DescriptorSourceFromProtoSets("testing/example.protoset") + if err != nil { + t.Fatalf("failed to load protoset: %v", err) + } + // really shallow check of the loaded descriptors + if sd, err := sourceProtoset.FindSymbol("TestService"); err != nil { + t.Errorf("failed to find TestService in protoset: %v", err) + } else if sd == nil { + t.Errorf("FindSymbol returned nil for TestService") + } else if _, ok := sd.(*desc.ServiceDescriptor); !ok { + t.Errorf("FindSymbol returned wrong kind of descriptor for TestService: %T", sd) + } + if md, err := sourceProtoset.FindSymbol("TestRequest"); err != nil { + t.Errorf("failed to find TestRequest in protoset: %v", err) + } else if md == nil { + t.Errorf("FindSymbol returned nil for TestRequest") + } else if _, ok := md.(*desc.MessageDescriptor); !ok { + t.Errorf("FindSymbol returned wrong kind of descriptor for TestRequest: %T", md) + } +} + func TestListServicesProtoset(t *testing.T) { doTestListServices(t, sourceProtoset, false) } diff --git a/mk-test-files.sh b/mk-test-files.sh index 7237366..94e1027 100755 --- a/mk-test-files.sh +++ b/mk-test-files.sh @@ -6,11 +6,14 @@ cd "$(dirname $0)" # Run this script to generate files used by tests. -echo "Creating protoset..." +echo "Creating protosets..." protoc ../../../google.golang.org/grpc/interop/grpc_testing/test.proto \ -I../../../ --include_imports \ --descriptor_set_out=testing/test.protoset +protoc testing/example.proto \ + --include_imports \ + --descriptor_set_out=testing/example.protoset echo "Creating certs for TLS testing..." if ! hash certstrap 2>/dev/null; then diff --git a/testing/example.proto b/testing/example.proto new file mode 100644 index 0000000..1229267 --- /dev/null +++ b/testing/example.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; + +import "google/protobuf/descriptor.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; + +message TestRequest { + repeated string file_names = 1; +} + +message TestResponse { + map file_protos = 1; + google.protobuf.Timestamp last_update_date = 2; +} + +service TestService { + rpc GetFiles (TestRequest) returns (TestResponse); + rpc Ping (google.protobuf.Empty) returns (google.protobuf.Empty); +} \ No newline at end of file diff --git a/testing/example.protoset b/testing/example.protoset new file mode 100644 index 0000000000000000000000000000000000000000..b3b19fe4a37cb2802cd9561dcc549b46deb18d22 GIT binary patch literal 7701 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