@@ -435,7 +435,7 @@ func (d *Decoder) unmarshal(val reflect.Value, start *StartElement) error {
435435 }
436436 return UnmarshalError (e )
437437 }
438- fv := finfo .value (sv )
438+ fv := finfo .value (sv , initNilPointers )
439439 if _ , ok := fv .Interface ().(Name ); ok {
440440 fv .Set (reflect .ValueOf (start .Name ))
441441 }
@@ -449,7 +449,7 @@ func (d *Decoder) unmarshal(val reflect.Value, start *StartElement) error {
449449 finfo := & tinfo .fields [i ]
450450 switch finfo .flags & fMode {
451451 case fAttr :
452- strv := finfo .value (sv )
452+ strv := finfo .value (sv , initNilPointers )
453453 if a .Name .Local == finfo .name && (finfo .xmlns == "" || finfo .xmlns == a .Name .Space ) {
454454 if err := d .unmarshalAttr (strv , a ); err != nil {
455455 return err
@@ -465,7 +465,7 @@ func (d *Decoder) unmarshal(val reflect.Value, start *StartElement) error {
465465 }
466466 if ! handled && any >= 0 {
467467 finfo := & tinfo .fields [any ]
468- strv := finfo .value (sv )
468+ strv := finfo .value (sv , initNilPointers )
469469 if err := d .unmarshalAttr (strv , a ); err != nil {
470470 return err
471471 }
@@ -478,22 +478,22 @@ func (d *Decoder) unmarshal(val reflect.Value, start *StartElement) error {
478478 switch finfo .flags & fMode {
479479 case fCDATA , fCharData :
480480 if ! saveData .IsValid () {
481- saveData = finfo .value (sv )
481+ saveData = finfo .value (sv , initNilPointers )
482482 }
483483
484484 case fComment :
485485 if ! saveComment .IsValid () {
486- saveComment = finfo .value (sv )
486+ saveComment = finfo .value (sv , initNilPointers )
487487 }
488488
489489 case fAny , fAny | fElement :
490490 if ! saveAny .IsValid () {
491- saveAny = finfo .value (sv )
491+ saveAny = finfo .value (sv , initNilPointers )
492492 }
493493
494- case fInnerXml :
494+ case fInnerXML :
495495 if ! saveXML .IsValid () {
496- saveXML = finfo .value (sv )
496+ saveXML = finfo .value (sv , initNilPointers )
497497 if d .saved == nil {
498498 saveXMLIndex = 0
499499 d .saved = new (bytes.Buffer )
@@ -687,7 +687,7 @@ Loop:
687687 }
688688 if len (finfo .parents ) == len (parents ) && finfo .name == start .Name .Local {
689689 // It's a perfect match, unmarshal the field.
690- return true , d .unmarshal (finfo .value (sv ), start )
690+ return true , d .unmarshal (finfo .value (sv , initNilPointers ), start )
691691 }
692692 if len (finfo .parents ) > len (parents ) && finfo .parents [len (parents )] == start .Name .Local {
693693 // It's a prefix for the field. Break and recurse
0 commit comments