From: Ian Lance Taylor Date: Thu, 9 Jan 2014 05:40:33 +0000 (-0800) Subject: runtime: change errorCString to a struct X-Git-Tag: go1.3beta1~1025 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7e639c0229b96c398e04de5acaf3010252b98d2c;p=gostls13.git runtime: change errorCString to a struct This prevents callers from using reflect to create a new instance of errorCString with an arbitrary value and calling the Error method to examine arbitrary memory. Fixes #7084. R=golang-codereviews, minux.ma, bradfitz CC=golang-codereviews https://golang.org/cl/49600043 --- diff --git a/src/pkg/runtime/error.go b/src/pkg/runtime/error.go index bd70908839..e704ff8726 100644 --- a/src/pkg/runtime/error.go +++ b/src/pkg/runtime/error.go @@ -75,19 +75,20 @@ func newErrorString(s string, ret *interface{}) { } // An errorCString represents a runtime error described by a single C string. -type errorCString uintptr +// Not "type errorCString uintptr" because of http://golang.org/issue/7084. +type errorCString struct{ cstr uintptr } func (e errorCString) RuntimeError() {} func cstringToGo(uintptr) string func (e errorCString) Error() string { - return "runtime error: " + cstringToGo(uintptr(e)) + return "runtime error: " + cstringToGo(e.cstr) } // For calling from C. func newErrorCString(s uintptr, ret *interface{}) { - *ret = errorCString(s) + *ret = errorCString{s} } type stringer interface {