Browse Source

Return a decoding error for negative array lengths

Evan Huus 12 years ago
parent
commit
0f5cff6a9a
1 changed files with 10 additions and 2 deletions
  1. 10 2
      real_decoder.go

+ 10 - 2
real_decoder.go

@@ -136,10 +136,14 @@ func (rd *realDecoder) getInt32Array() ([]int32, error) {
 		return nil, InsufficientData
 	}
 
-	if n <= 0 {
+	if n == 0 {
 		return nil, nil
 	}
 
+	if n < 0 {
+		return nil, DecodingError
+	}
+
 	ret := make([]int32, n)
 	for i := range ret {
 		ret[i] = int32(binary.BigEndian.Uint32(rd.raw[rd.off:]))
@@ -161,10 +165,14 @@ func (rd *realDecoder) getInt64Array() ([]int64, error) {
 		return nil, InsufficientData
 	}
 
-	if n <= 0 {
+	if n == 0 {
 		return nil, nil
 	}
 
+	if n < 0 {
+		return nil, DecodingError
+	}
+
 	ret := make([]int64, n)
 	for i := range ret {
 		ret[i] = int64(binary.BigEndian.Uint64(rd.raw[rd.off:]))