]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: change errorCString to a struct
authorIan Lance Taylor <iant@golang.org>
Thu, 9 Jan 2014 05:40:33 +0000 (21:40 -0800)
committerIan Lance Taylor <iant@golang.org>
Thu, 9 Jan 2014 05:40:33 +0000 (21:40 -0800)
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

index bd70908839e18b0cccb36863c0c4fbb7771d48b4..e704ff8726be1d9745004c6a35ec3a212eafb7ef 100644 (file)
@@ -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 {