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

expvar: panic: interface conversion: interface is nil, not expvar.Var #52719

Closed
catenacyber opened this issue May 5, 2022 · 4 comments
Closed
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done.
Milestone

Comments

@catenacyber
Copy link
Contributor

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

$ go version
go version go1.17.6 darwin/amd64

Does this issue reproduce with the latest release?

Yes

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

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/catena/Library/Caches/go-build"
GOENV="/Users/catena/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/catena/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/catena/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.17.6"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/catena/go/src/github.com/catenacyber/go/src/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 -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/pp/dc1dtf9x2js3v0jx_m010nqr0000gn/T/go-build4237848497=/tmp/go-build -gno-record-gcc-switches -fno-common"
GOROOT/bin/go version: go version go1.17.6 darwin/amd64
GOROOT/bin/go tool compile -V: compile version go1.17.6
uname -v: Darwin Kernel Version 21.3.0: Wed Jan  5 21:37:58 PST 2022; root:xnu-8019.80.24~20/RELEASE_X86_64
ProductName:	macOS
ProductVersion:	12.2.1
BuildVersion:	21D62
lldb --version: lldb-1316.0.9.41
Apple Swift version 5.6 (swiftlang-5.6.0.323.62 clang-1316.0.20.8)
gdb --version: GNU gdb (GDB) 9.1

What did you do?

Run https://go.dev/play/p/L708GRIfgkv

What did you expect to see?

The program finishing and printing hello

What did you see instead?

panic: interface conversion: interface is nil, not expvar.Var

goroutine 1 [running]:
expvar.(*Map).Do(0xc00005e2a0, 0xc00007def8)
	/usr/local/go-faketime/src/expvar/expvar.go:227 +0x13c
expvar.(*Map).String(0xc00005e2a0?)
	/usr/local/go-faketime/src/expvar/expvar.go:117 +0x9c
main.main()
	/tmp/sandbox1378131054/prog.go:14 +0x75

Program exited.

Found by https://github.com/catenacyber/ngolo-fuzzing on oss-fuzz
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47006

Is this a real bug ?

@mengzhuo
Copy link
Contributor

mengzhuo commented May 5, 2022

A more simpler example.

import (
	"expvar"
)

func main() {
	Map0 := expvar.NewMap("")
	Map0.Set("", nil)
	Map0.String()
}

@mengzhuo
Copy link
Contributor

mengzhuo commented May 5, 2022

I think we should check the type of av Set(key string, av Var) by

switch av.(type) {
case nil:
   panic("can't set nil type")
default:
}

cc @bradfitz per owner, @griesemer

@dr2chase dr2chase added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label May 5, 2022
@dr2chase dr2chase added this to the Backlog milestone May 5, 2022
@ianlancetaylor
Copy link
Contributor

I don't see any deep reason why we should prohibit setting a map element to nil. I think we should fix the String method to not crash.

@ianlancetaylor ianlancetaylor self-assigned this May 28, 2022
@gopherbot
Copy link

Change https://go.dev/cl/408677 mentions this issue: expvar: don't crash if map value set to nil

@dmitshur dmitshur added NeedsFix The path to resolution is known, but the work has not been done. and removed NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels Jun 15, 2022
@dmitshur dmitshur modified the milestones: Backlog, Go1.19 Jun 15, 2022
@golang golang locked and limited conversation to collaborators Jun 22, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done.
Projects
None yet
Development

No branches or pull requests

6 participants