golang/go

x/tools/gopls: automated issue report (crash)

Closed this issue · 4 comments

gopls version: (devel)
gopls flags: -rpc.trace --debug=localhost:6060
update flags: proxy
extension version: 2021.9.1523
go version: devel go1.18-f9271e4f85
environment: Visual Studio Code - Insiders darwin
initialization error: undefined
issue timestamp: Fri, 17 Sep 2021 19:59:46 GMT
restart history:
Fri, 17 Sep 2021 19:51:02 GMT: activation (enabled: true)

ATTENTION: PLEASE PROVIDE THE DETAILS REQUESTED BELOW.

Describe what you observed.

panic: runtime error: slice bounds out of range [4294967281:152]

goroutine 17124 [running]:
golang.org/x/tools/internal/lsp/source.findRune({0x1b71740, 0xc015308360}, {0x1b9adc0, 0xc00670e500}, {0x1b7d918, 0xc005a2d380}, {0x153080f0, 0xc0})
	  hover.go:216  0x100d
golang.org/x/tools/internal/lsp/source.hoverRune({0x1b71698, 0xc006e28080}, {0x1b9adc0, 0xc00670e500}, {0x1b7d918, 0xc005a2d380}, {0x13b9b6a8, 0xc0})
	  hover.go:106  0xe5
golang.org/x/tools/internal/lsp/source.Hover({0x1b71698, 0xc006e28080}, {0x1b9adc0, 0xc00670e500}, {0x1b7d918, 0xc005a2d380}, {0x17f7c40, 0x0})
	  hover.go:72  0xab
golang.org/x/tools/internal/lsp.(*Server).hover(0xc011df5228, {0x1b71698, 0xc006e28080}, 0xc015308030)
	  hover.go:26  0x25c
golang.org/x/tools/internal/lsp.(*Server).Hover(0xc008d58000, {0x1b71698, 0xc006e28080}, 0x17f7c40)
	  server_gen.go:128  0x25
golang.org/x/tools/internal/lsp/protocol.serverDispatch({0x1b71698, 0xc006e28080}, {0x1b9ec20, 0xc0002e1440}, 0xc015308000, {0x1b71900, 0xc006e28000})
	  tsserver.go:372  0x12da
golang.org/x/tools/internal/lsp/protocol.ServerHandler.func1({0x1b71698, 0xc006e28080}, 0xc015308000, {0x1b71900, 0xc006e28000})
	  protocol.go:154  0x90
golang.org/x/tools/internal/lsp/lsprpc.handshaker.func1({0x1b71698, 0xc006e28080}, 0xc015308000, {0x1b71900, 0xc006e28000})
	  lsprpc.go:506  0xa43
golang.org/x/tools/internal/jsonrpc2.MustReplyHandler.func1({0x1b71698, 0xc006e28080}, 0xc0153050e0, {0x1b71900, 0xc006e28000})
	  handler.go:35  0xf6
golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1.2()
	  handler.go:103  0xa3
created by golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1
	  handler.go:100  0x20a
[Error - 3:59:34 PM] 

OPTIONAL: If you would like to share more information, you can attach your complete gopls logs.

NOTE: THESE MAY CONTAIN SENSITIVE INFORMATION ABOUT YOUR CODEBASE.
DO NOT SHARE LOGS IF YOU ARE WORKING IN A PRIVATE REPOSITORY.

<OPTIONAL: ATTACH LOGS HERE>

That looks like an unsigned integer overflow. (4294967281 = 2³² - 15)

FWIW I just ran into this as well and narrowed it down to a small repro:

-- go.mod --
module x

go 1.18
-- main.go --
package main

func main() {
    const x = `
    foo
    `
}

And call hover with cursor over foo.

% go version
go version devel go1.18-b1bedc0774 Thu Sep 16 17:44:44 2021 +0000 darwin/amd64
panic: runtime error: slice bounds out of range [4294967288:15]

goroutine 1713 [running]:
golang.org/x/tools/internal/lsp/source.findRune({0x1b72ec0, 0xc002954360}, {0x1b9c520, 0xc002872000}, {0x1b7f098, 0xc00027e5a0}, {0x29540f0, 0xc0})
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/source/hover.go:216 +0x100d
golang.org/x/tools/internal/lsp/source.hoverRune({0x1b72e18, 0xc00276db80}, {0x1b9c520, 0xc002872000}, {0x1b7f098, 0xc00027e5a0}, {0x2a236a8, 0xc0})
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/source/hover.go:106 +0xe5
golang.org/x/tools/internal/lsp/source.Hover({0x1b72e18, 0xc00276db80}, {0x1b9c520, 0xc002872000}, {0x1b7f098, 0xc00027e5a0}, {0x17f8e60, 0x0})
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/source/hover.go:72 +0xab
golang.org/x/tools/internal/lsp.(*Server).hover(0xc002717df8, {0x1b72e18, 0xc00276db80}, 0xc002954030)
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/hover.go:26 +0x25c
golang.org/x/tools/internal/lsp.(*Server).Hover(0xc001302000, {0x1b72e18, 0xc00276db80}, 0x17f8e60)
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/server_gen.go:128 +0x25
golang.org/x/tools/internal/lsp/protocol.serverDispatch({0x1b72e18, 0xc00276db80}, {0x1ba0380, 0xc00023f0e0}, 0xc002954000, {0x1b73080, 0xc00276db00})
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/protocol/tsserver.go:372 +0x12da
golang.org/x/tools/internal/lsp/protocol.ServerHandler.func1({0x1b72e18, 0xc00276db80}, 0xc002954000, {0x1b73080, 0xc00276db00})
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/protocol/protocol.go:154 +0x90
golang.org/x/tools/internal/lsp/lsprpc.handshaker.func1({0x1b72e18, 0xc00276db80}, 0xc002954000, {0x1b73080, 0xc00276db00})
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/lsp/lsprpc/lsprpc.go:506 +0xa43
golang.org/x/tools/internal/jsonrpc2.MustReplyHandler.func1({0x1b72e18, 0xc00276db80}, 0xc002735f98, {0x1b73080, 0xc00276db00})
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/jsonrpc2/handler.go:35 +0xf6
golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1.2()
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/jsonrpc2/handler.go:103 +0xa3
created by golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1
   /Users/leitzler/go/pkg/mod/golang.org/x/tools@v0.1.7-0.20210919163452-7559231edc43/internal/jsonrpc2/handler.go:100 +0x20a

Change https://golang.org/cl/351629 mentions this issue: internal/lsp: handle panic in hoverRune by using token.Pos

Change https://golang.org/cl/351649 mentions this issue: internal/lsp: handle panic in hoverRune by using token.Pos