From 7e639c0229b96c398e04de5acaf3010252b98d2c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 8 Jan 2014 21:40:33 -0800 Subject: [PATCH] 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 --- src/pkg/runtime/error.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pkg/runtime/error.go b/src/pkg/runtime/error.go index bd70908839e..e704ff8726b 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 {