summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2021-08-31 10:06:01 +0200
committerGitHub <noreply@github.com>2021-08-31 16:06:01 +0800
commit0274933c22ac71f5289c0e227158f4a7feecc4f7 (patch)
tree2a029bf263c9b5a18285fbc4dad9be690afef134
parent67776372d672b3e4d0e58d05dd550c81b7bf11c4 (diff)
downloadgitea-0274933c22ac71f5289c0e227158f4a7feecc4f7.tar.gz
gitea-0274933c22ac71f5289c0e227158f4a7feecc4f7.zip
Fix git.Blob.DataAsync(): close pipe since we return a NopCloser (#16899) (#16900)
* make sure headGitRepo is closed on err too * refactor * Fix git.Blob.DataAsync(): exec cancel since we already read all bytes (close pipe since we return a NopCloser) Co-authored-by: zeripath <art27@cantab.net>
-rw-r--r--modules/git/blob_nogogit.go6
-rw-r--r--routers/web/repo/compare.go1
-rw-r--r--routers/web/repo/issue.go3
-rw-r--r--routers/web/repo/pull.go6
4 files changed, 7 insertions, 9 deletions
diff --git a/modules/git/blob_nogogit.go b/modules/git/blob_nogogit.go
index 5b42920ebe..f70ecb5333 100644
--- a/modules/git/blob_nogogit.go
+++ b/modules/git/blob_nogogit.go
@@ -46,8 +46,8 @@ func (b *Blob) DataAsync() (io.ReadCloser, error) {
if size < 4096 {
bs, err := ioutil.ReadAll(io.LimitReader(rd, size))
+ defer cancel()
if err != nil {
- cancel()
return nil, err
}
_, err = rd.Discard(1)
@@ -105,12 +105,12 @@ func (b *blobReader) Read(p []byte) (n int, err error) {
// Close implements io.Closer
func (b *blobReader) Close() error {
+ defer b.cancel()
if b.n > 0 {
for b.n > math.MaxInt32 {
n, err := b.rd.Discard(math.MaxInt32)
b.n -= int64(n)
if err != nil {
- b.cancel()
return err
}
b.n -= math.MaxInt32
@@ -118,14 +118,12 @@ func (b *blobReader) Close() error {
n, err := b.rd.Discard(int(b.n))
b.n -= int64(n)
if err != nil {
- b.cancel()
return err
}
}
if b.n == 0 {
_, err := b.rd.Discard(1)
b.n--
- b.cancel()
return err
}
return nil
diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go
index 1e4df802b9..2d9670d36a 100644
--- a/routers/web/repo/compare.go
+++ b/routers/web/repo/compare.go
@@ -623,7 +623,6 @@ func CompareDiff(ctx *context.Context) {
headGitRepo.Close()
}
}()
-
if ctx.Written() {
return
}
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index 9d678eccdd..4f6daa3b73 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -419,9 +419,6 @@ func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repos
}
handleTeamMentions(ctx)
- if ctx.Written() {
- return
- }
}
func retrieveProjects(ctx *context.Context, repo *models.Repository) {
diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go
index 251aa1e7e9..ddd4b2618f 100644
--- a/routers/web/repo/pull.go
+++ b/routers/web/repo/pull.go
@@ -1012,10 +1012,14 @@ func CompareAndPullRequestPost(ctx *context.Context) {
)
headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx)
+ defer func() {
+ if headGitRepo != nil {
+ headGitRepo.Close()
+ }
+ }()
if ctx.Written() {
return
}
- defer headGitRepo.Close()
labelIDs, assigneeIDs, milestoneID, _ := ValidateRepoMetas(ctx, *form, true)
if ctx.Written() {