Skip to content

text/template: Panic when an undefined variable was accessed #54149

Closed as not planned
@YoitoFes

Description

@YoitoFes

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

$ go version
go version go1.18.4 windows/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
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Naoto\AppData\Local\go-build
set GOENV=C:\Users\Naoto\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=E:\Users\Naoto\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=E:\Users\Naoto\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.18.4
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=E:\Documents\golang-test\go.mod
set GOWORK=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=D:\AppData\Local\Temp\go-build3068758331=/tmp/go-build -gno-record-gcc-switches

What did you do?

Accessed undefined variable in a template as follows:

Runnable program

package main

import (
	"fmt"
	"os"
	"text/template"
)

func main() {
	tmpl, _ := template.New("test_template").Parse("Hello {{$val}}")
	err := tmpl.Execute(os.Stdout, "test")
	if err != nil {
		fmt.Println(err)
	}
}

go.dev/play link

What did you expect to see?

Got non-nil err

What did you see instead?

Got a panic

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
	panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x4e0d8c]

goroutine 1 [running]:
text/template.errRecover(0xc00004de98)
	/usr/local/go-faketime/src/text/template/exec.go:164 +0x15b
panic({0x501d20, 0x5f65c0})
	/usr/local/go-faketime/src/runtime/panic.go:838 +0x207
text/template.(*Template).execute(0x0, {0x547168?, 0xc00000e018?}, {0x4fb840?, 0x5468a0?})
	/usr/local/go-faketime/src/text/template/exec.go:215 +0x22c
text/template.(*Template).Execute(...)
	/usr/local/go-faketime/src/text/template/exec.go:201
main.main()
	/tmp/sandbox2346080729/prog.go:13 +0x11c

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions