diff --git a/modules/git/blob.go b/modules/git/blob.go
index 732356e5b..5831bc373 100644
--- a/modules/git/blob.go
+++ b/modules/git/blob.go
@@ -34,7 +34,7 @@ func (b *Blob) GetBlobContent() (string, error) {
 	return string(buf), nil
 }
 
-// GetBlobLineCount gets line count of lob as raw text
+// GetBlobLineCount gets line count of the blob
 func (b *Blob) GetBlobLineCount() (int, error) {
 	reader, err := b.DataAsync()
 	if err != nil {
@@ -42,10 +42,14 @@ func (b *Blob) GetBlobLineCount() (int, error) {
 	}
 	defer reader.Close()
 	buf := make([]byte, 32*1024)
-	count := 0
+	count := 1
 	lineSep := []byte{'\n'}
+
+	c, err := reader.Read(buf)
+	if c == 0 && err == io.EOF {
+		return 0, nil
+	}
 	for {
-		c, err := reader.Read(buf)
 		count += bytes.Count(buf[:c], lineSep)
 		switch {
 		case err == io.EOF:
@@ -53,6 +57,7 @@ func (b *Blob) GetBlobLineCount() (int, error) {
 		case err != nil:
 			return count, err
 		}
+		c, err = reader.Read(buf)
 	}
 }
 
diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go
index f53a31769..fddfc4a63 100644
--- a/routers/web/repo/compare.go
+++ b/routers/web/repo/compare.go
@@ -714,7 +714,11 @@ func ExcerptBlob(ctx *context.Context) {
 		lastLeft += chunkSize
 		lastRight += chunkSize
 	} else {
-		section.Lines, err = getExcerptLines(commit, filePath, lastLeft, lastRight, idxRight-lastRight-1)
+		offset := -1
+		if direction == "down" {
+			offset = 0
+		}
+		section.Lines, err = getExcerptLines(commit, filePath, lastLeft, lastRight, idxRight-lastRight+offset)
 		leftHunkSize = 0
 		rightHunkSize = 0
 		idxLeft = lastLeft