|
@@ -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
|
|
|
}
|
|
|
|