mirror of
https://github.com/golang/go
synced 2024-11-05 15:06:09 -07:00
encoding/xml: fix reserved namespace check to be case-insensitive
Fixes the check for the reserved namespace prefix "xml" to be case insensitive, so as to match all variants of: (('X'|'x')('M'|'m')('L'|'l')) as mandated by Section 2.3 of https://www.w3.org/TR/REC-xml/ Fixes #35151. Change-Id: Id5a98e5f9d69d3741dc16f567c4320f1ad0b3c70 Reviewed-on: https://go-review.googlesource.com/c/go/+/203417 Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
0a18cbc2e6
commit
346d7d273c
@ -345,8 +345,11 @@ func (p *printer) createAttrPrefix(url string) string {
|
|||||||
if prefix == "" || !isName([]byte(prefix)) || strings.Contains(prefix, ":") {
|
if prefix == "" || !isName([]byte(prefix)) || strings.Contains(prefix, ":") {
|
||||||
prefix = "_"
|
prefix = "_"
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(prefix, "xml") {
|
// xmlanything is reserved and any variant of it regardless of
|
||||||
// xmlanything is reserved.
|
// case should be matched, so:
|
||||||
|
// (('X'|'x') ('M'|'m') ('L'|'l'))
|
||||||
|
// See Section 2.3 of https://www.w3.org/TR/REC-xml/
|
||||||
|
if len(prefix) >= 3 && strings.EqualFold(prefix[:3], "xml") {
|
||||||
prefix = "_" + prefix
|
prefix = "_" + prefix
|
||||||
}
|
}
|
||||||
if p.attrNS[prefix] != "" {
|
if p.attrNS[prefix] != "" {
|
||||||
|
@ -2266,6 +2266,30 @@ var encodeTokenTests = []struct {
|
|||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
want: `<foo xmlns="space"><bar xmlns="space" xmlns:space="space" space:attr="value">`,
|
want: `<foo xmlns="space"><bar xmlns="space" xmlns:space="space" space:attr="value">`,
|
||||||
|
}, {
|
||||||
|
desc: "reserved namespace prefix -- all lower case",
|
||||||
|
toks: []Token{
|
||||||
|
StartElement{Name{"", "foo"}, []Attr{
|
||||||
|
{Name{"http://www.w3.org/2001/xmlSchema-instance", "nil"}, "true"},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
want: `<foo xmlns:_xmlSchema-instance="http://www.w3.org/2001/xmlSchema-instance" _xmlSchema-instance:nil="true">`,
|
||||||
|
}, {
|
||||||
|
desc: "reserved namespace prefix -- all upper case",
|
||||||
|
toks: []Token{
|
||||||
|
StartElement{Name{"", "foo"}, []Attr{
|
||||||
|
{Name{"http://www.w3.org/2001/XMLSchema-instance", "nil"}, "true"},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
want: `<foo xmlns:_XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:nil="true">`,
|
||||||
|
}, {
|
||||||
|
desc: "reserved namespace prefix -- all mixed case",
|
||||||
|
toks: []Token{
|
||||||
|
StartElement{Name{"", "foo"}, []Attr{
|
||||||
|
{Name{"http://www.w3.org/2001/XmLSchema-instance", "nil"}, "true"},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
want: `<foo xmlns:_XmLSchema-instance="http://www.w3.org/2001/XmLSchema-instance" _XmLSchema-instance:nil="true">`,
|
||||||
}}
|
}}
|
||||||
|
|
||||||
func TestEncodeToken(t *testing.T) {
|
func TestEncodeToken(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user