@@ -324,6 +324,8 @@ func (reader sDatumReader) mapEnum(field Schema, dec Decoder) (reflect.Value, er
324
324
enumIndex , err := dec .ReadEnum ()
325
325
if err != nil {
326
326
return reflect .ValueOf (enumIndex ), err
327
+ } else if enumIndex < 0 {
328
+ return reflect .ValueOf (enumIndex ), fmt .Errorf ("Enum index %d < 0 in enum %s" , enumIndex , field .GetName ())
327
329
}
328
330
329
331
schema := field .(* EnumSchema )
@@ -337,6 +339,10 @@ func (reader sDatumReader) mapEnum(field Schema, dec Decoder) (reflect.Value, er
337
339
}
338
340
enumSymbolsToIndexCacheLock .Unlock ()
339
341
342
+ if int (enumIndex ) >= len (schema .Symbols ) {
343
+ return reflect.Value {}, fmt .Errorf ("Enum index %d too high for enum %s" , enumIndex , field .GetName ())
344
+ }
345
+
340
346
enum := & GenericEnum {
341
347
Symbols : schema .Symbols ,
342
348
symbolsToIndex : symbolsToIndex ,
@@ -400,7 +406,9 @@ func (this sDatumReader) fillRecord(field Schema, record reflect.Value, dec Deco
400
406
recordSchema := field .(* RecordSchema )
401
407
//ri := record.Interface()
402
408
for i := 0 ; i < len (recordSchema .Fields ); i ++ {
403
- this .findAndSet (record , recordSchema .Fields [i ], dec )
409
+ if err := this .findAndSet (record , recordSchema .Fields [i ], dec ); err != nil {
410
+ return err
411
+ }
404
412
}
405
413
}
406
414
return nil
@@ -551,6 +559,8 @@ func (reader *GenericDatumReader) mapEnum(field Schema, dec Decoder) (*GenericEn
551
559
enumIndex , err := dec .ReadEnum ()
552
560
if err != nil {
553
561
return nil , err
562
+ } else if enumIndex < 0 {
563
+ return nil , fmt .Errorf ("Enum index %d < 0 in schema %s" , enumIndex , field .GetName ())
554
564
}
555
565
556
566
schema := field .(* EnumSchema )
0 commit comments