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:
parent
2d55fdb507
commit
7e639c0229
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user