diff options
author | xuri <xuri.me@gmail.com> | 2023-08-09 06:32:12 +0000 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2023-08-30 20:17:11 +0000 |
commit | 2d07bb86f0a2bab639c51baca4c3cf6d9c4374ad (patch) | |
tree | 9c2456616ae1cc14230308c244547b40069f0ee9 | |
parent | 745b81b6e6883c4fa85ade03b4f05fdbfec46b0d (diff) | |
download | go-2d07bb86f0a2bab639c51baca4c3cf6d9c4374ad.tar.gz go-2d07bb86f0a2bab639c51baca4c3cf6d9c4374ad.zip |
[release-branch.go1.21] encoding/xml: overriding by empty namespace when no new name declaration
The unmarshal and marshal XML text should be consistent if not modified deserialize variable.
For #61881
Fixes #62051
Change-Id: I475f7b05211b618685597d3ff20b97e3bbeaf8f8
GitHub-Last-Rev: 6831c770c384831798cb1c6dc4674e5d4caa5e3c
GitHub-Pull-Request: golang/go#58401
Reviewed-on: https://go-review.googlesource.com/c/go/+/522316
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Commit-Queue: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
-rw-r--r-- | src/encoding/xml/marshal.go | 3 | ||||
-rw-r--r-- | src/encoding/xml/xml_test.go | 7 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/encoding/xml/marshal.go b/src/encoding/xml/marshal.go index 0c3cc0dc36..ae39846f5b 100644 --- a/src/encoding/xml/marshal.go +++ b/src/encoding/xml/marshal.go @@ -543,8 +543,9 @@ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo, startTemplat } } - // If a name was found, namespace is overridden with an empty space + // If a empty name was found, namespace is overridden with an empty space if tinfo.xmlname != nil && start.Name.Space == "" && + tinfo.xmlname.xmlns == "" && tinfo.xmlname.name == "" && len(p.tags) != 0 && p.tags[len(p.tags)-1].Space != "" { start.Attr = append(start.Attr, Attr{Name{"", xmlnsPrefix}, ""}) } diff --git a/src/encoding/xml/xml_test.go b/src/encoding/xml/xml_test.go index f5c7259cfb..42f5f5f8a6 100644 --- a/src/encoding/xml/xml_test.go +++ b/src/encoding/xml/xml_test.go @@ -1064,14 +1064,19 @@ func TestIssue7113(t *testing.T) { XMLName Name `xml:""` // Sets empty namespace } + type D struct { + XMLName Name `xml:"d"` + } + type A struct { XMLName Name `xml:""` C C `xml:""` + D D } var a A structSpace := "b" - xmlTest := `<A xmlns="` + structSpace + `"><C xmlns=""></C></A>` + xmlTest := `<A xmlns="` + structSpace + `"><C xmlns=""></C><d></d></A>` t.Log(xmlTest) err := Unmarshal([]byte(xmlTest), &a) if err != nil { |