From 34f04a675c204dc00f2ae1bc412e474b9a4c087d Mon Sep 17 00:00:00 2001 From: Marcel van Lohuizen Date: Fri, 28 Aug 2015 10:21:45 +0200 Subject: [PATCH] encoding/xml: check for exported fields in embedded structs Addresses issue #12367. Must be checked in before CL 14010. Change-Id: I4523a1de112ed02371504e27882659bce8028a9f Reviewed-on: https://go-review.googlesource.com/14012 Reviewed-by: Russ Cox --- src/encoding/xml/marshal_test.go | 10 ++++++++++ src/encoding/xml/typeinfo.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/encoding/xml/marshal_test.go b/src/encoding/xml/marshal_test.go index 330fbee1af..aab94b16f3 100644 --- a/src/encoding/xml/marshal_test.go +++ b/src/encoding/xml/marshal_test.go @@ -139,6 +139,7 @@ type EmbedA struct { EmbedC EmbedB EmbedB FieldA string + embedD } type EmbedB struct { @@ -153,6 +154,11 @@ type EmbedC struct { FieldC string } +type embedD struct { + fieldD string + FieldE string // Promoted and visible when embedD is embedded. +} + type NameCasing struct { XMLName struct{} `xml:"casing"` Xy string @@ -711,6 +717,9 @@ var marshalTests = []struct { }, }, FieldA: "A.A", + embedD: embedD{ + FieldE: "A.D.E", + }, }, ExpectXML: `` + `A.C.B` + @@ -724,6 +733,7 @@ var marshalTests = []struct { `A.B.C.C` + `` + `A.A` + + `A.D.E` + ``, }, diff --git a/src/encoding/xml/typeinfo.go b/src/encoding/xml/typeinfo.go index 22248d20a6..6766b88f09 100644 --- a/src/encoding/xml/typeinfo.go +++ b/src/encoding/xml/typeinfo.go @@ -60,7 +60,7 @@ func getTypeInfo(typ reflect.Type) (*typeInfo, error) { n := typ.NumField() for i := 0; i < n; i++ { f := typ.Field(i) - if f.PkgPath != "" || f.Tag.Get("xml") == "-" { + if (f.PkgPath != "" && !f.Anonymous) || f.Tag.Get("xml") == "-" { continue // Private field } -- 2.50.0