@@ -477,7 +477,9 @@ func (d *Decoder) getDataLength(fieldSpecifierLen uint16, t FieldType) (uint16,
477477 err error
478478 readLength uint16
479479 )
480+
480481 r := d .reader
482+
481483 if (t == String || t == OctetArray ) && (fieldSpecifierLen == 65535 ) {
482484 var len8 uint8
483485 len8 , err = r .Uint8 ()
@@ -494,7 +496,8 @@ func (d *Decoder) getDataLength(fieldSpecifierLen uint16, t FieldType) (uint16,
494496 } else {
495497 readLength = fieldSpecifierLen
496498 }
497- return readLength , err
499+
500+ return readLength , nil
498501}
499502
500503func (d * Decoder ) decodeData (tr TemplateRecord ) ([]DecodedField , error ) {
@@ -504,6 +507,7 @@ func (d *Decoder) decodeData(tr TemplateRecord) ([]DecodedField, error) {
504507 b []byte
505508 readLength uint16
506509 )
510+
507511 r := d .reader
508512
509513 for i := 0 ; i < len (tr .ScopeFieldSpecifiers ); i ++ {
@@ -512,6 +516,11 @@ func (d *Decoder) decodeData(tr TemplateRecord) ([]DecodedField, error) {
512516 tr .ScopeFieldSpecifiers [i ].ElementID ,
513517 }]
514518
519+ if ! ok {
520+ return nil , nonfatalError (fmt .Errorf ("IPFIX element key (%d) not exist (scope)" ,
521+ tr .ScopeFieldSpecifiers [i ].ElementID ))
522+ }
523+
515524 readLength , err = d .getDataLength (tr .ScopeFieldSpecifiers [i ].Length , m .Type )
516525 if err != nil {
517526 return nil , err
@@ -522,11 +531,6 @@ func (d *Decoder) decodeData(tr TemplateRecord) ([]DecodedField, error) {
522531 return nil , err
523532 }
524533
525- if ! ok {
526- return nil , nonfatalError (fmt .Errorf ("IPFIX element key (%d) not exist (scope)" ,
527- tr .ScopeFieldSpecifiers [i ].ElementID ))
528- }
529-
530534 fields = append (fields , DecodedField {
531535 ID : m .FieldID ,
532536 Value : Interpret (& b , m .Type ),
@@ -540,21 +544,21 @@ func (d *Decoder) decodeData(tr TemplateRecord) ([]DecodedField, error) {
540544 tr .FieldSpecifiers [i ].ElementID ,
541545 }]
542546
547+ if ! ok {
548+ return nil , nonfatalError (fmt .Errorf ("IPFIX element key (%d) not exist" ,
549+ tr .FieldSpecifiers [i ].ElementID ))
550+ }
551+
543552 readLength , err = d .getDataLength (tr .FieldSpecifiers [i ].Length , m .Type )
544553 if err != nil {
545554 return nil , err
546555 }
547556
548- b , err = r .Read (int (tr . FieldSpecifiers [ i ]. Length ))
557+ b , err = r .Read (int (readLength ))
549558 if err != nil {
550559 return nil , err
551560 }
552561
553- if ! ok {
554- return nil , nonfatalError (fmt .Errorf ("IPFIX element key (%d) not exist" ,
555- tr .FieldSpecifiers [i ].ElementID ))
556- }
557-
558562 fields = append (fields , DecodedField {
559563 ID : m .FieldID ,
560564 Value : Interpret (& b , m .Type ),
0 commit comments