]> Cypherpunks repositories - gostls13.git/commitdiff
reflect: declare slice as *[]unsafe.Pointer instead of *[]byte
authorJan Ziak <0xe2.0x9a.0x9b@gmail.com>
Thu, 27 Dec 2012 18:35:04 +0000 (02:35 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Thu, 27 Dec 2012 18:35:04 +0000 (02:35 +0800)
The new garbage collector (CL 6114046) may find the fake *[]byte value
and interpret its contents as bytes rather than as potential pointers.
This may lead the garbage collector to free memory blocks that
shouldn't be freed.

R=dvyukov, rsc, dave, minux.ma, remyoudompheng, iant
CC=golang-dev
https://golang.org/cl/7000059

src/pkg/reflect/value.go

index 93401fea52fca0250fa41faa6da151c6620bd493..10a4c0775b45558f0077ff24305dfe0528f99f9d 100644 (file)
@@ -1491,7 +1491,7 @@ func (v Value) Slice(beg, end int) Value {
        }
 
        // Declare slice so that gc can see the base pointer in it.
-       var x []byte
+       var x []unsafe.Pointer
 
        // Reinterpret as *SliceHeader to edit.
        s := (*SliceHeader)(unsafe.Pointer(&x))
@@ -1899,7 +1899,7 @@ func MakeSlice(typ Type, len, cap int) Value {
        }
 
        // Declare slice so that gc can see the base pointer in it.
-       var x []byte
+       var x []unsafe.Pointer
 
        // Reinterpret as *SliceHeader to edit.
        s := (*SliceHeader)(unsafe.Pointer(&x))