Browse Source

Loosen the binary file check

Vadim Markovtsev 6 years ago
parent
commit
8f74b5b176
1 changed files with 12 additions and 2 deletions
  1. 12 2
      internal/plumbing/diff.go

+ 12 - 2
internal/plumbing/diff.go

@@ -147,19 +147,29 @@ func CountLines(file *object.Blob) (int, error) {
 	var scanner *bufio.Scanner
 	buffer := make([]byte, bufio.MaxScanTokenSize)
 	counter := 0
+	utf8Errors := 0
 	for scanner == nil || scanner.Err() == bufio.ErrTooLong {
 		if scanner != nil && !utf8.Valid(scanner.Bytes()) {
-			return -1, errors.New("binary")
+			utf8Errors++
+			if utf8Errors > 4 {
+				return -1, errors.New("binary")
+			}
 		}
 		scanner = bufio.NewScanner(reader)
 		scanner.Buffer(buffer, 0)
 		for scanner.Scan() {
 			if !utf8.Valid(scanner.Bytes()) {
-				return -1, errors.New("binary")
+				utf8Errors++
+				if utf8Errors > 4 {
+					return -1, errors.New("binary")
+				}
 			}
 			counter++
 		}
 	}
+	if float32(utf8Errors) / float32(counter) >= 0.01 || utf8Errors > 4 {
+		return -1, errors.New("binary")
+	}
 	return counter, nil
 }