소스 검색

fix reuse buffer bug

Tao Wen 9 년 전
부모
커밋
a460807cb4
2개의 변경된 파일23개의 추가작업 그리고 1개의 파일을 삭제
  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")
 		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
 }
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 2 - 0
jsoniter_base64_test.go


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.