aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2023-08-23 22:31:34 +0000
committerGopher Robot <gobot@golang.org>2023-08-30 20:41:27 +0000
commit140266fe7521bf75bf0037f12265190213cc8e7d (patch)
tree0257c5e4db772233ef8989cac4807bd4c50d9a1d /src/encoding
parentdffc47e75aaa61eb460cf474a7fe8de46c83c445 (diff)
downloadgo-140266fe7521bf75bf0037f12265190213cc8e7d.tar.gz
go-140266fe7521bf75bf0037f12265190213cc8e7d.zip
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. Fixes #61881 Change-Id: I475f7b05211b618685597d3ff20b97e3bbeaf8f8 GitHub-Last-Rev: 6831c770c384831798cb1c6dc4674e5d4caa5e3c GitHub-Pull-Request: golang/go#58401 Reviewed-on: https://go-review.googlesource.com/c/go/+/466295 Reviewed-by: ri xu <xuri.me@gmail.com> Auto-Submit: Ian Lance Taylor <iant@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Russ Cox <rsc@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/encoding')
-rw-r--r--src/encoding/xml/marshal.go3
-rw-r--r--src/encoding/xml/xml_test.go7
2 files changed, 8 insertions, 2 deletions
diff --git a/src/encoding/xml/marshal.go b/src/encoding/xml/marshal.go
index e641148011..c93e35222d 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 {