Prechádzať zdrojové kódy

fix reuse buffer bug

Tao Wen 9 rokov pred
rodič
commit
a460807cb4
2 zmenil súbory, kde vykonal 23 pridanie a 1 odobranie
  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
 }
 

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 2 - 0
jsoniter_base64_test.go


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov