]> source.dussan.org Git - gitea.git/commitdiff
Fix git.Blob.DataAsync(): close pipe since we return a NopCloser (#16899)
author6543 <6543@obermui.de>
Tue, 31 Aug 2021 07:43:31 +0000 (09:43 +0200)
committerGitHub <noreply@github.com>
Tue, 31 Aug 2021 07:43:31 +0000 (08:43 +0100)
* 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)

modules/git/blob_nogogit.go
routers/web/repo/compare.go
routers/web/repo/issue.go
routers/web/repo/pull.go

index 26815a63f1abb5a10c9ef5e6f3644813bf02babf..3391bc39311b1b1348e27094c8d183056d8dd9b5 100644 (file)
@@ -47,8 +47,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)
@@ -106,12 +106,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
@@ -119,14 +119,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
index ee8d3766129e73c1bd6279d6b9431761bf778cd4..eb6c37a1a636361a84dfddbe7ec227087b230941 100644 (file)
@@ -621,7 +621,6 @@ func CompareDiff(ctx *context.Context) {
                        headGitRepo.Close()
                }
        }()
-
        if ctx.Written() {
                return
        }
index 3f7af7a51faa28090d638ed9c13d4accf06e17e0..bb3a0c8a9c79f606bfdc30e9e36f00cae1af91a4 100644 (file)
@@ -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) {
index 6e83a72c2492cc06d8901dec9c3f3fa7a59a829c..8ff2ddf3949d1e1d9cff1f5b31e6550cdc20a85b 100644 (file)
@@ -1024,10 +1024,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() {