Browse Source

fix reuse buffer bug

Tao Wen 9 years ago
parent
commit
a460807cb4
2 changed files with 23 additions and 1 deletions
  1. 21 1
      jsoniter.go
  2. 2 0
      jsoniter_base64_test.go

+ 21 - 1
jsoniter.go

@@ -554,7 +554,27 @@ func (iter *Iterator) readObjectField() (ret string) {
 		iter.ReportError("ReadObject", "expect : after object field")
 		iter.ReportError("ReadObject", "expect : after object field")
 		return
 		return
 	}
 	}
-	iter.skipWhitespaces()
+	// skip whitespaces, and detect if buffer is rotated
+	for {
+		for i := iter.head; i < iter.tail; i++ {
+			c := iter.buf[i]
+			switch c {
+			case ' ', '\n', '\t', '\r':
+				continue
+			}
+			iter.head = i
+			break
+		}
+		if iter.head == iter.tail {
+			// no longer safe to reuse buffer
+			field = string(str)
+			if !iter.loadMore() {
+				return
+			}
+		} else {
+			break
+		}
+	}
 	return field
 	return field
 }
 }
 
 

File diff suppressed because it is too large
+ 2 - 0
jsoniter_base64_test.go


Some files were not shown because too many files changed in this diff