From 3cc7d27b6f23628e1ecc9ac1e5f61728be73da76 Mon Sep 17 00:00:00 2001
From: KN4CK3R <KN4CK3R@users.noreply.github.com>
Date: Sat, 3 Apr 2021 14:44:12 +0200
Subject: [PATCH] Close file on invalid range (#15166)

* Close file on invalid range.

* Close on seek error

Co-authored-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Lauris BH <lauris@nix.lv>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
---
 modules/lfs/content_store.go | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/modules/lfs/content_store.go b/modules/lfs/content_store.go
index 788ef5b9a6..9473cc35c2 100644
--- a/modules/lfs/content_store.go
+++ b/modules/lfs/content_store.go
@@ -53,6 +53,10 @@ func (s *ContentStore) Get(meta *models.LFSMetaObject, fromByte int64) (io.ReadC
 	}
 	if fromByte > 0 {
 		if fromByte >= meta.Size {
+			err = f.Close()
+			if err != nil {
+				log.Error("Whilst trying to read LFS OID[%s]: Unable to close Error: %v", meta.Oid, err)
+			}
 			return nil, ErrRangeNotSatisfiable{
 				FromByte: fromByte,
 			}
@@ -60,6 +64,10 @@ func (s *ContentStore) Get(meta *models.LFSMetaObject, fromByte int64) (io.ReadC
 		_, err = f.Seek(fromByte, io.SeekStart)
 		if err != nil {
 			log.Error("Whilst trying to read LFS OID[%s]: Unable to seek to %d Error: %v", meta.Oid, fromByte, err)
+			errClose := f.Close()
+			if errClose != nil {
+				log.Error("Whilst trying to read LFS OID[%s]: Unable to close Error: %v", meta.Oid, errClose)
+			}
 		}
 	}
 	return f, err