]> Cypherpunks repositories - gostls13.git/commitdiff
html/template: handle nil Error values in context.String
authorSamuel Tan <samueltan@gmail.com>
Tue, 11 Jun 2019 05:18:56 +0000 (22:18 -0700)
committerDmitri Shuralyov <dmitshur@golang.org>
Mon, 17 Jun 2019 19:12:05 +0000 (19:12 +0000)
Add a special case to print a generic nil error when context.err is
nil.

Previously, this case was unchecked, leading to a call to (*Error).Error
with a nil receiver, which was triggering a nil pointer access. However,
this bug was masked by the panic-recovery code in package fmt.

I tested this change by running `dlv test` in src/html/template, running
the `continue` command, and verifying that no "bad access" errors are
returned.

Fixes #28854

Change-Id: I0b637b943de003d9efc294f6f1e49b793668d037
Reviewed-on: https://go-review.googlesource.com/c/go/+/181579
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
src/html/template/context.go

index 7ab3d1fed674cdfee4bc9c4e93e533dde0925494..f7d4849928d98603a1db9162496362ef45378a26 100644 (file)
@@ -26,7 +26,11 @@ type context struct {
 }
 
 func (c context) String() string {
-       return fmt.Sprintf("{%v %v %v %v %v %v %v}", c.state, c.delim, c.urlPart, c.jsCtx, c.attr, c.element, c.err)
+       var err error
+       if c.err != nil {
+               err = c.err
+       }
+       return fmt.Sprintf("{%v %v %v %v %v %v %v}", c.state, c.delim, c.urlPart, c.jsCtx, c.attr, c.element, err)
 }
 
 // eq reports whether two contexts are equal.