Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/tools/gopls: crash trying to add an import manually with gopls built using go1.14beta1 #36610

Closed
psanford opened this issue Jan 16, 2020 · 2 comments
Labels
Milestone

Comments

@psanford
Copy link

@psanford psanford commented Jan 16, 2020

What version of Go are you using (go version)?

$ go version
go1.14beta1

Does this issue reproduce with the latest release?

I reproduced this on a gopls build from master.

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/psanford/.cache/go-build"
GOENV="/home/psanford/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/tmp/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/psanford/lib/.go-1.14beta1-ebe68aa4219b673dbd060b8a6d9a339b6b6b0383772aa4349c8183f0a8f339e4"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/psanford/lib/.go-1.14beta1-ebe68aa4219b673dbd060b8a6d9a339b6b6b0383772aa4349c8183f0a8f339e4/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/psanford/projects/thirdparty/gotools/gopls/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build660370694=/tmp/go-build -gno-record-gcc-switches"

What did you do?

I tried to manually add an import to the import block of the following code (above the "fmt"):

package main

import (
	"fmt"
)

func main() {
	fmt.Println("hello world")
}

After inserting a single non-quote character gopls crashed:

package main

import (
	m
	"fmt"
)

func main() {
	fmt.Println("hello world")
}

The stack trace from gopls:

panic: runtime error: slice bounds out of range [14:0]

goroutine 1797 [running]:
golang.org/x/tools/internal/lsp/source.trimToImports(0xc0002d4540, 0xc0003f7f00, 0xc000226900, 0x50, 0xb7, 0xda4900, 0xc00242ed40, 0x0, 0x0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/format.go:253 +0x505
golang.org/x/tools/internal/lsp/source.computeOneImportFixEdits(0xdb40a0, 0xc00090ce10, 0xdc1a00, 0xc0003c0240, 0xdb42a0, 0xc00242eae0, 0xc002ce85d8, 0xc0022dad00, 0xc002ce8548, 0x45140e, ...)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/format.go:151 +0x1cc
golang.org/x/tools/internal/lsp/source.(*completer).importEdits(0xc0020f9a40, 0xc0021d3bf0, 0xc002ce8830, 0x1, 0x1, 0xc0016e17c0, 0xb)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/completion_format.go:225 +0x284
golang.org/x/tools/internal/lsp/source.(*completer).item(0xc0020f9a40, 0xdc3be0, 0xc00053cfc0, 0x3fb1eb851eb851ec, 0xc645ff, 0x3, 0x0, 0xc0021d3bf0, 0x0, 0x0, ...)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/completion_format.go:119 +0xf93
golang.org/x/tools/internal/lsp/source.(*completer).found(0xc0020f9a40, 0xdc3be0, 0xc00053cfc0, 0x3fb1eb851eb851ec, 0xc645ff, 0x3, 0x0, 0xc0021d3bf0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/completion.go:351 +0x2bc
golang.org/x/tools/internal/lsp/source.(*completer).lexical.func1(0xc645f9, 0x9, 0x0, 0x0, 0xc645ff, 0x3, 0x0, 0x7)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/completion.go:903 +0x2ef
golang.org/x/tools/internal/imports.getAllCandidates.func3(0xc002072580, 0xc002072580)
	/home/psanford/projects/thirdparty/gotools/internal/imports/fix.go:688 +0x120
golang.org/x/tools/internal/imports.getCandidatePkgs(0xdb4060, 0xc00053cde0, 0xc002545520, 0xc002560187, 0x28, 0xc001a50b4c, 0x4, 0xc002754460, 0x203000, 0xc0001b7b80)
	/home/psanford/projects/thirdparty/gotools/internal/imports/fix.go:607 +0x30c
golang.org/x/tools/internal/imports.getAllCandidates(0xdb4060, 0xc00053cde0, 0xc0021d3b00, 0x126c365, 0x1, 0xc002560187, 0x28, 0xc001a50b4c, 0x4, 0xc002754460, ...)
	/home/psanford/projects/thirdparty/gotools/internal/imports/fix.go:700 +0x16b
golang.org/x/tools/internal/imports.GetAllCandidates(0xdb4060, 0xc00053cde0, 0xc0021d3b00, 0x126c365, 0x1, 0xc002560187, 0x28, 0xc001a50b4c, 0x4, 0xc002545500, ...)
	/home/psanford/projects/thirdparty/gotools/internal/imports/imports.go:126 +0x106
golang.org/x/tools/internal/lsp/source.(*completer).lexical.func2(0xc002545500, 0xc002545500, 0xc00053cde0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/completion.go:925 +0xf4
golang.org/x/tools/internal/lsp/cache.(*view).RunProcessEnvFunc(0xc0003c0240, 0xdb4060, 0xc00053cde0, 0xc002072080, 0x0, 0x0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/cache/view.go:307 +0xf3
golang.org/x/tools/internal/lsp/source.(*completer).lexical(0xc0020f9a40, 0x0, 0x0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/completion.go:924 +0xc70
golang.org/x/tools/internal/lsp/source.Completion(0xdb40a0, 0xc00090ce10, 0xdc0d00, 0xc000690500, 0xdb27a0, 0xc0015fa600, 0x4008000000000000, 0x4000000000000000, 0x0, 0x0, ...)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/source/completion.go:530 +0xcad
golang.org/x/tools/internal/lsp.(*Server).completion(0xc00028fce0, 0xdb40a0, 0xc00205e690, 0xc000519920, 0x0, 0x0, 0xc001252fd0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/completion.go:35 +0x7be
golang.org/x/tools/internal/lsp.(*Server).Completion(0xc00028fce0, 0xdb40a0, 0xc00205e690, 0xc000519920, 0xc000519920, 0x0, 0x0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/server.go:179 +0x49
golang.org/x/tools/internal/lsp/protocol.serverHandler.Deliver(0xdca9a0, 0xc00028fce0, 0xdb40a0, 0xc00205e690, 0xc0022e4780, 0xc00205e600, 0xc0025aefa0)
	/home/psanford/projects/thirdparty/gotools/internal/lsp/protocol/tsserver.go:316 +0x2596
golang.org/x/tools/internal/jsonrpc2.(*Conn).Run.func1(0xc001cfafc0, 0xc0022e4780, 0xc0002cd9e0, 0xdb40a0, 0xc00205e690, 0x0, 0x0, 0xc001ebd140)
	/home/psanford/projects/thirdparty/gotools/internal/jsonrpc2/jsonrpc2.go:370 +0x160
created by golang.org/x/tools/internal/jsonrpc2.(*Conn).Run
	/home/psanford/projects/thirdparty/gotools/internal/jsonrpc2/jsonrpc2.go:354 +0x874

Process gopls stderr<1> finished

I think this started happening after switching to go1.14.beta1 and rebuilding gopls.

cc: @heschik

@gopherbot gopherbot added this to the Unreleased milestone Jan 16, 2020
@gopherbot

This comment has been minimized.

Copy link

@gopherbot gopherbot commented Jan 16, 2020

Thank you for filing a gopls issue! Please take a look at the Troubleshooting guide, and make sure that you have provided all of the relevant information here.

@gopherbot

This comment has been minimized.

Copy link

@gopherbot gopherbot commented Jan 17, 2020

Change https://golang.org/cl/215119 mentions this issue: internal/lsp/source: trim file very carefully

@stamblerre stamblerre changed the title x/tools/gopls: Crash trying to add an import manually with gopls built using go1.14beta1 x/tools/gopls: crash trying to add an import manually with gopls built using go1.14beta1 Jan 17, 2020
@stamblerre stamblerre modified the milestones: Unreleased, gopls/v0.3.0 Jan 17, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants
You can’t perform that action at this time.