Browse Source

codec: fix binc decode len function.

Fixes #36
Ugorji Nwoke 11 years ago
parent
commit
f545de861e
1 changed files with 20 additions and 3 deletions
  1. 20 3
      codec/binc.go

+ 20 - 3
codec/binc.go

@@ -567,10 +567,27 @@ func (d *bincDecDriver) readArrayLen() (length int) {
 }
 }
 
 
 func (d *bincDecDriver) decLen() int {
 func (d *bincDecDriver) decLen() int {
-	if d.vs <= 3 {
-		return int(d.decUint())
+	if d.vs > 3 {
+		return int(d.vs - 4)
 	}
 	}
-	return int(d.vs - 4)
+	return int(d.decLenNumber())
+}
+
+func (d *bincDecDriver) decLenNumber() (v uint64) {
+	switch d.vs {
+	case 0:
+		v = uint64(d.r.readn1())
+	case 1:
+		d.r.readb(d.b[6:])
+		v = uint64(bigen.Uint16(d.b[6:]))
+	case 2:
+		d.r.readb(d.b[4:])
+		v = uint64(bigen.Uint32(d.b[4:]))
+	default:
+		d.r.readb(d.b[:])
+		v = bigen.Uint64(d.b[:])
+	}
+	return
 }
 }
 
 
 func (d *bincDecDriver) decodeString() (s string) {
 func (d *bincDecDriver) decodeString() (s string) {