From: Giulio Iotti Date: Mon, 31 Aug 2015 16:08:49 +0000 (+0300) Subject: encoding/xml: case-insensitive encoding recognition X-Git-Tag: go1.6beta1~295 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0b55be1ba2cf1cbb84ef4292942e6532df0b22ad;p=gostls13.git encoding/xml: case-insensitive encoding recognition From the XML spec: "XML processors should match character encoding names in a case-insensitive way" Fixes #12417. Change-Id: I678c50152a49c14364be62b3f21ab9b9b009b24b Reviewed-on: https://go-review.googlesource.com/14084 Reviewed-by: Russ Cox --- diff --git a/src/encoding/xml/xml.go b/src/encoding/xml/xml.go index bdd607cfa8..70ff877172 100644 --- a/src/encoding/xml/xml.go +++ b/src/encoding/xml/xml.go @@ -583,7 +583,7 @@ func (d *Decoder) rawToken() (Token, error) { return nil, d.err } enc := procInst("encoding", content) - if enc != "" && enc != "utf-8" && enc != "UTF-8" { + if enc != "" && enc != "utf-8" && enc != "UTF-8" && !strings.EqualFold(enc, "utf-8") { if d.CharsetReader == nil { d.err = fmt.Errorf("xml: encoding %q declared but Decoder.CharsetReader is nil", enc) return nil, d.err diff --git a/src/encoding/xml/xml_test.go b/src/encoding/xml/xml_test.go index 19465d7fb1..5d5e4bf970 100644 --- a/src/encoding/xml/xml_test.go +++ b/src/encoding/xml/xml_test.go @@ -771,3 +771,35 @@ func TestIssue11405(t *testing.T) { } } } + +func TestIssue12417(t *testing.T) { + testCases := []struct { + s string + ok bool + }{ + {``, true}, + {``, true}, + {``, true}, + {``, false}, + } + for _, tc := range testCases { + d := NewDecoder(strings.NewReader(tc.s)) + var err error + for { + _, err = d.Token() + if err != nil { + if err == io.EOF { + err = nil + } + break + } + } + if err != nil && tc.ok { + t.Errorf("%q: Encoding charset: expected no error, got %s", tc.s, err) + continue + } + if err == nil && !tc.ok { + t.Errorf("%q: Encoding charset: expected error, got nil", tc.s) + } + } +}