]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.21] encoding/xml: overriding by empty namespace when no new name...
authorxuri <xuri.me@gmail.com>
Wed, 9 Aug 2023 06:32:12 +0000 (06:32 +0000)
committerGopher Robot <gobot@golang.org>
Wed, 30 Aug 2023 20:17:11 +0000 (20:17 +0000)
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>
src/encoding/xml/marshal.go
src/encoding/xml/xml_test.go

index 0c3cc0dc3618a18958a61918f1ba34400860f197..ae39846f5b6c14e982f6ea3fe1d1c143967c9a47 100644 (file)
@@ -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}, ""})
        }
index f5c7259cfb45c1d24bf83e67362acf6061475dc6..42f5f5f8a601c7ade0ff25a2c2d85ed249d85b7f 100644 (file)
@@ -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 {