aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
Diffstat (limited to 'src/encoding')
-rw-r--r--src/encoding/xml/xml.go6
-rw-r--r--src/encoding/xml/xml_test.go23
2 files changed, 26 insertions, 3 deletions
diff --git a/src/encoding/xml/xml.go b/src/encoding/xml/xml.go
index be90b62c9a..7556d4b876 100644
--- a/src/encoding/xml/xml.go
+++ b/src/encoding/xml/xml.go
@@ -277,9 +277,6 @@ func NewTokenDecoder(t TokenReader) *Decoder {
// If Token encounters an unrecognized name space prefix,
// it uses the prefix as the Space rather than report an error.
func (d *Decoder) Token() (Token, error) {
- if d.t != nil {
- return d.t.Token()
- }
var t Token
var err error
if d.stk != nil && d.stk.kind == stkEOF {
@@ -548,6 +545,9 @@ func (d *Decoder) RawToken() (Token, error) {
}
func (d *Decoder) rawToken() (Token, error) {
+ if d.t != nil {
+ return d.t.Token()
+ }
if d.err != nil {
return nil, d.err
}
diff --git a/src/encoding/xml/xml_test.go b/src/encoding/xml/xml_test.go
index 2437f19d9d..7a3511d583 100644
--- a/src/encoding/xml/xml_test.go
+++ b/src/encoding/xml/xml_test.go
@@ -861,3 +861,26 @@ func TestWrapDecoder(t *testing.T) {
t.Fatalf("Got unexpected chardata: `%s`\n", o.Chardata)
}
}
+
+type tokReader struct{}
+
+func (tokReader) Token() (Token, error) {
+ return StartElement{}, nil
+}
+
+type Failure struct{}
+
+func (Failure) UnmarshalXML(*Decoder, StartElement) error {
+ return nil
+}
+
+func TestTokenUnmarshaler(t *testing.T) {
+ defer func() {
+ if r := recover(); r != nil {
+ t.Error("Unexpected panic using custom token unmarshaler")
+ }
+ }()
+
+ d := NewTokenDecoder(tokReader{})
+ d.Decode(&Failure{})
+}