go-protoparser
go-protoparser copied to clipboard
Parser panics when double semi-colon in service option
test case
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.
actual behaviour
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/[email protected]/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/[email protected]/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.
Expected behaviour:
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.