Skip to content

Commit 30f6e56

Browse files
committed
fix #81 pull request - variable len str and octarr in ipfix
1 parent 46c97be commit 30f6e56

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

ipfix/decoder.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

500503
func (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

Comments
 (0)