]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/gob: don't send type info for unexported fields
authorRob Pike <r@golang.org>
Fri, 2 Dec 2011 08:02:24 +0000 (00:02 -0800)
committerRob Pike <r@golang.org>
Fri, 2 Dec 2011 08:02:24 +0000 (00:02 -0800)
Fixes #2517.

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5440079

src/pkg/encoding/gob/encoder.go
src/pkg/encoding/gob/encoder_test.go

index e4a48dfc4fca6804bad5bf4501d52463f49be45c..a15b5a1f9a1ee20abbb6e3d8b7eb2d05e453250d 100644 (file)
@@ -119,7 +119,9 @@ func (enc *Encoder) sendActualType(w io.Writer, state *encoderState, ut *userTyp
        switch st := actual; st.Kind() {
        case reflect.Struct:
                for i := 0; i < st.NumField(); i++ {
-                       enc.sendType(w, state, st.Field(i).Type)
+                       if isExported(st.Field(i).Name) {
+                               enc.sendType(w, state, st.Field(i).Type)
+                       }
                }
        case reflect.Array, reflect.Slice:
                enc.sendType(w, state, st.Elem())
index bc5af120af3350bd975bb3075012e6dbcd1aa7ca..5bc957bb37011eb144eaf6248da2e776f1d84f8c 100644 (file)
@@ -662,3 +662,19 @@ func TestSequentialDecoder(t *testing.T) {
                }
        }
 }
+
+// Should be able to have unrepresentable fields (chan, func) as long as they
+// are unexported.
+type Bug2 struct {
+       A int
+       b chan int
+}
+
+func TestUnexportedChan(t *testing.T) {
+       b := Bug2{23, make(chan int)}
+       var stream bytes.Buffer
+       enc := NewEncoder(&stream)
+       if err := enc.Encode(b); err != nil {
+               t.Fatalf("error encoding unexported channel: %s", err)
+       }
+}