Browse Source

codec: bytesDecReader.read can only err with io.EOF (never io.ErrUnexpectedEOF)

Also, clean up bufioDecReader.skip.
Ugorji Nwoke 7 years ago
parent
commit
4f1af4e05b
1 changed files with 41 additions and 22 deletions
  1. 41 22
      codec/decode.go

+ 41 - 22
codec/decode.go

@@ -697,18 +697,18 @@ func (z *bufioDecReader) skip(accept *bitset256) (token byte) {
 	i := z.c
 	i := z.c
 LOOP:
 LOOP:
 	if i < uint(len(z.buf)) {
 	if i < uint(len(z.buf)) {
-		if token = z.buf[i]; !accept.isset(token) {
-			// z.skipLoopFn(i) // inline below so cost is within inline budget
-			z.n += (i - z.c) - 1
-			i++
-			if z.trb {
-				z.doTrack(i)
-			}
-			z.c = i
-			return
-		}
+		// inline z.skipLoopFn(i) and refactor, so cost is within inline budget
+		token = z.buf[i]
 		i++
 		i++
-		goto LOOP
+		if accept.isset(token) {
+			goto LOOP
+		}
+		z.n += i - 2 - z.c
+		if z.trb {
+			z.doTrack(i)
+		}
+		z.c = i
+		return
 	}
 	}
 	return z.skipFill(accept)
 	return z.skipFill(accept)
 }
 }
@@ -952,19 +952,38 @@ func (z *bytesDecReader) readx(n uint) (bs []byte) {
 	// }
 	// }
 	// return
 	// return
 
 
-	if n == 0 {
-		return
-	}
-	if z.c == uint(len(z.b)) {
-		panic(io.EOF)
-	}
-	if z.c+n > uint(len(z.b)) {
-		panic(io.ErrUnexpectedEOF)
+	if n != 0 {
+		z.c += n
+		if z.c > uint(len(z.b)) {
+			z.c = uint(len(z.b))
+			panic(io.EOF)
+		}
+		bs = z.b[z.c-n : z.c]
 	}
 	}
+	return
 
 
-	// z.a -= n
-	z.c += n
-	return z.b[z.c-n : z.c]
+	// if n == 0 {
+	// } else if z.c+n > uint(len(z.b)) {
+	// 	z.c = uint(len(z.b))
+	// 	panic(io.EOF)
+	// } else {
+	// 	z.c += n
+	// 	bs = z.b[z.c-n : z.c]
+	// }
+	// return
+
+	// if n == 0 {
+	// 	return
+	// }
+	// if z.c == uint(len(z.b)) {
+	// 	panic(io.EOF)
+	// }
+	// if z.c+n > uint(len(z.b)) {
+	// 	panic(io.ErrUnexpectedEOF)
+	// }
+	// // z.a -= n
+	// z.c += n
+	// return z.b[z.c-n : z.c]
 }
 }
 
 
 func (z *bytesDecReader) readb(bs []byte) {
 func (z *bytesDecReader) readb(bs []byte) {