mirror of
https://github.com/golang/go
synced 2024-11-18 09:24:54 -07:00
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 <rsc@golang.org>
This commit is contained in:
parent
a30dd9ceeb
commit
34f04a675c
@ -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: `<EmbedA>` +
|
||||
`<FieldB>A.C.B</FieldB>` +
|
||||
@ -724,6 +733,7 @@ var marshalTests = []struct {
|
||||
`<FieldC>A.B.C.C</FieldC>` +
|
||||
`</EmbedB>` +
|
||||
`<FieldA>A.A</FieldA>` +
|
||||
`<FieldE>A.D.E</FieldE>` +
|
||||
`</EmbedA>`,
|
||||
},
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user