]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/xml: don't crash on invalid XMLName tag
authorIan Lance Taylor <iant@golang.org>
Thu, 7 Dec 2017 02:02:02 +0000 (18:02 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 7 Dec 2017 05:09:01 +0000 (05:09 +0000)
Fixes #20953

Change-Id: Ia30a6e0e335c1f738e1359500e09057b5981f1c7
Reviewed-on: https://go-review.googlesource.com/82397
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/encoding/xml/marshal_test.go
src/encoding/xml/typeinfo.go

index 11f451270a9f528f5dcbf2354650883e95372ab6..5c79a48e7adb19b152c1e097aaa3a1d05e4a7624 100644 (file)
@@ -2441,3 +2441,22 @@ func TestIssue16158(t *testing.T) {
                t.Errorf("Unmarshal: expected error, got nil")
        }
 }
+
+// Issue 20953. Crash on invalid XMLName attribute.
+
+type InvalidXMLName struct {
+       XMLName Name `xml:"error"`
+       Type    struct {
+               XMLName Name `xml:"type,attr"`
+       }
+}
+
+func TestInvalidXMLName(t *testing.T) {
+       var buf bytes.Buffer
+       enc := NewEncoder(&buf)
+       if err := enc.Encode(InvalidXMLName{}); err == nil {
+               t.Error("unexpected success")
+       } else if want := "invalid tag"; !strings.Contains(err.Error(), want) {
+               t.Errorf("error %q does not contain %q", err, want)
+       }
+}
index 2e7ae935a8bb9803cab1171722a4f6d2dada53c6..48de3d7e9e9cd2ee2d5cb19f6d5b6c076423ac62 100644 (file)
@@ -241,7 +241,7 @@ func lookupXMLName(typ reflect.Type) (xmlname *fieldInfo) {
                        continue
                }
                finfo, err := structFieldInfo(typ, &f)
-               if finfo.name != "" && err == nil {
+               if err == nil && finfo.name != "" {
                        return finfo
                }
                // Also consider errors as a non-existent field tag