1
0
mirror of https://github.com/golang/go synced 2024-11-24 01:30:10 -07:00

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
This commit is contained in:
Ian Lance Taylor 2014-01-08 21:40:33 -08:00
parent 2d55fdb507
commit 7e639c0229

View 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 {