Open tardyp opened 3 months ago
Here is a simple reprod:
syntax = "proto3"; import "google/protobuf/descriptor.proto"; extend google.protobuf.ServiceOptions { string service_description = 51000; } service MyService{ option(service_description) = "description";; }
note that there is a mistake in the file, with a double semicolon after description.
when running protolint on this file, we got a crash:
protolint lint test.proto panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x18 pc=0x527104] goroutine 1 [running]: github.com/yoheimuta/go-protoparser/v4/parser.(*Service).Accept(0xc0001b45a0, {0xb52a20, 0xc000008bd0}) /home/runner/go/pkg/mod/github.com/yoheimuta/go-protoparser/v4@v4.7.0/parser/service.go:90 +0x64 github.com/yoheimuta/go-protoparser/v4/parser.(*Proto).Accept(0xc000222750?, {0xb52a20, 0xc000008bd0}) /home/runner/go/pkg/mod/github.com/yoheimuta/go-protoparser/v4@v4.7.0/parser/proto.go:26 +0x69 github.com/yoheimuta/protolint/linter/visitor.RunVisitorAutoDisable({0xb53b88?, 0xc000224a80?}, 0xc000222750, {0xa7185b, 0x10}, 0x5?) /home/runner/work/protolint/protolint/linter/visitor/hasExtendedVisitor.go:55 +0x119 github.com/yoheimuta/protolint/linter/visitor.RunVisitor(...) /home/runner/work/protolint/protolint/linter/visitor/hasExtendedVisitor.go:28 github.com/yoheimuta/protolint/internal/addon/rules.QuoteConsistentRule.Apply({{{0xa68c01?, 0x15?}}, 0xc00001e82d?, 0xa?}, 0xc00019e600?) /home/runner/work/protolint/protolint/internal/addon/rules/quoteConsistentRule.go:60 +0xa7 github.com/yoheimuta/protolint/internal/linter.(*Linter).Run(0xc00000b6e0?, 0xc000177758, {0xc000228180?, 0x7, 0x0?}) /home/runner/work/protolint/protolint/internal/linter/linter.go:33 +0x10e github.com/yoheimuta/protolint/internal/cmd/subcmds/lint.(*CmdLint).runOneFile(0xc0001c4380, {{0xc00001e810, 0x27}, {0xc00001e82d, 0xa}}) /home/runner/work/protolint/protolint/internal/cmd/subcmds/lint/cmdLint.go:131 +0x151 github.com/yoheimuta/protolint/internal/cmd/subcmds/lint.(*CmdLint).run(0xc0001c4380) /home/runner/work/protolint/protolint/internal/cmd/subcmds/lint/cmdLint.go:100 +0xd6 github.com/yoheimuta/protolint/internal/cmd/subcmds/lint.(*CmdLint).Run(0xc0001c4380) /home/runner/work/protolint/protolint/internal/cmd/subcmds/lint/cmdLint.go:77 +0x53 github.com/yoheimuta/protolint/internal/cmd.doLint({0xc0000360e0?, 0x100000000?, 0x0?}, {0xb46980, 0xc00005e028}, {0xb46980, 0xc00005e030}) /home/runner/work/protolint/protolint/internal/cmd/cmd.go:110 +0x2d1 github.com/yoheimuta/protolint/internal/cmd.doSub({0xc0000360d0?, 0x0?, 0x1d8e0249df8?}, {0xb46980?, 0xc00005e028?}, {0xb46980?, 0xc00005e030?}) /home/runner/work/protolint/protolint/internal/cmd/cmd.go:64 +0xac github.com/yoheimuta/protolint/internal/cmd.Do({0xc0000360d0?, 0x60?, 0x0?}, {0xb46980?, 0xc00005e028?}, {0xb46980?, 0xc00005e030?}) /home/runner/work/protolint/protolint/internal/cmd/cmd.go:49 +0x78 main.main() /home/runner/work/protolint/protolint/cmd/protolint/main.go:11 +0x5e
protoc correctly handles this by reporting a syntax error.
protolint should not panic, and rather output a syntax error like protoc
@tardyp Thank you for your suggestion. You are right. Expected behaviour is better.
test case
Here is a simple reprod:
note that there is a mistake in the file, with a double semicolon after description.
actual behaviour
when running protolint on this file, we got a crash:
protoc correctly handles this by reporting a syntax error.
Expected behaviour:
protolint should not panic, and rather output a syntax error like protoc