From 2fc6583e366a8f7eb0bb9d231cef5b0990182eee Mon Sep 17 00:00:00 2001 From: KN4CK3R Date: Fri, 23 Feb 2024 22:17:47 +0000 Subject: [PATCH 1/2] Do not double close reader. --- modules/git/blob_nogogit.go | 13 ++++++++++++- routers/web/repo/editor.go | 3 --- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/git/blob_nogogit.go b/modules/git/blob_nogogit.go index 9e1c2a0376d40..0c872f0865dd3 100644 --- a/modules/git/blob_nogogit.go +++ b/modules/git/blob_nogogit.go @@ -9,6 +9,7 @@ import ( "bufio" "bytes" "io" + "io/fs" "code.gitea.io/gitea/modules/log" ) @@ -102,7 +103,17 @@ func (b *blobReader) Read(p []byte) (n int, err error) { // Close implements io.Closer func (b *blobReader) Close() error { + if b.rd == nil { + return fs.ErrClosed + } + defer b.cancel() - return DiscardFull(b.rd, b.n+1) + if err := DiscardFull(b.rd, b.n+1); err != nil { + return err + } + + b.rd = nil + + return nil } diff --git a/routers/web/repo/editor.go b/routers/web/repo/editor.go index bc3cb8801d023..28644fbe3d57e 100644 --- a/routers/web/repo/editor.go +++ b/routers/web/repo/editor.go @@ -161,9 +161,6 @@ func editFile(ctx *context.Context, isNewFile bool) { } d, _ := io.ReadAll(dataRc) - if err := dataRc.Close(); err != nil { - log.Error("Error whilst closing blob data: %v", err) - } buf = append(buf, d...) if content, err := charset.ToUTF8(buf, charset.ConvertOpts{KeepBOM: true}); err != nil { From e50392b3c07d1a444fdaf7f3fa895d6d9b85ccd3 Mon Sep 17 00:00:00 2001 From: KN4CK3R Date: Sat, 24 Feb 2024 11:02:52 +0000 Subject: [PATCH 2/2] Return `nil` when calling `Close` multiple times. --- modules/git/blob_nogogit.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/git/blob_nogogit.go b/modules/git/blob_nogogit.go index 0c872f0865dd3..945a6bc432c29 100644 --- a/modules/git/blob_nogogit.go +++ b/modules/git/blob_nogogit.go @@ -9,7 +9,6 @@ import ( "bufio" "bytes" "io" - "io/fs" "code.gitea.io/gitea/modules/log" ) @@ -104,7 +103,7 @@ func (b *blobReader) Read(p []byte) (n int, err error) { // Close implements io.Closer func (b *blobReader) Close() error { if b.rd == nil { - return fs.ErrClosed + return nil } defer b.cancel()