ソースを参照

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


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません