瀏覽代碼

Scan only the first 8000 bytes for \0

Vadim Markovtsev 6 年之前
父節點
當前提交
ebecdf88be
共有 1 個文件被更改,包括 7 次插入1 次删除
  1. 7 1
      internal/plumbing/blob_cache.go

+ 7 - 1
internal/plumbing/blob_cache.go

@@ -56,7 +56,13 @@ func (b *CachedBlob) CountLines() (int, error) {
 	if len(b.Data) == 0 {
 		return 0, nil
 	}
-	if bytes.IndexByte(b.Data, 0) >= 0 {
+	// 8000 was taken from go-git's utils/binary.IsBinary()
+	sniffLen := 8000
+	sniff := b.Data
+	if len(sniff) > sniffLen {
+		sniff = sniff[:sniffLen]
+	}
+	if bytes.IndexByte(sniff, 0) >= 0 {
 		return 0, ErrorBinary
 	}
 	lines := bytes.Count(b.Data, []byte{'\n'})