internal/imports: handle out of range panic in modInfo
Fixes golang/vscode-go#882
Change-Id: If238f61be5653c159293a811bf9728029701de48
Reviewed-on: https://go-review.googlesource.com/c/tools/+/267125
Trust: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
diff --git a/internal/imports/mod.go b/internal/imports/mod.go
index 8a83613..73f7a49 100644
--- a/internal/imports/mod.go
+++ b/internal/imports/mod.go
@@ -347,10 +347,11 @@
}
if r.dirInModuleCache(dir) {
- matches := modCacheRegexp.FindStringSubmatch(dir)
- index := strings.Index(dir, matches[1]+"@"+matches[2])
- modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2])
- return modDir, readModName(filepath.Join(modDir, "go.mod"))
+ if matches := modCacheRegexp.FindStringSubmatch(dir); len(matches) == 3 {
+ index := strings.Index(dir, matches[1]+"@"+matches[2])
+ modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2])
+ return modDir, readModName(filepath.Join(modDir, "go.mod"))
+ }
}
for {
if info, ok := r.cacheLoad(dir); ok {