diff options
author | zeripath <art27@cantab.net> | 2022-07-13 23:24:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-14 00:24:29 +0200 |
commit | fe09ee564dc90b261beb7b34801b3176c89483a5 (patch) | |
tree | c4973370242ffd4255afb36b43f9cdef8594cedc /modules | |
parent | 07ec8288bff6295c7db5558846153a61625af80d (diff) | |
download | gitea-fe09ee564dc90b261beb7b34801b3176c89483a5.tar.gz gitea-fe09ee564dc90b261beb7b34801b3176c89483a5.zip |
Prevent context deadline error propagation in GetCommitsInfo (#20346)
* Prevent context deadline error propagation in GetCommitsInfo
Although `WalkGitLog` tries to test for `context.DeadlineExceededErr`
there is a small chance that the error will propagate to the reader
before it is recognised. This will cause the error to propagate up to
`renderDirectoryFiles` and cause a http status 500.
Here we check that the error passed is a `DeadlineExceededErr` via error.Is
Fix #20329
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/git/log_name_status.go | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/modules/git/log_name_status.go b/modules/git/log_name_status.go index ffd0a0991b..e1e117ff4b 100644 --- a/modules/git/log_name_status.go +++ b/modules/git/log_name_status.go @@ -8,6 +8,7 @@ import ( "bufio" "bytes" "context" + "errors" "io" "path" "sort" @@ -62,9 +63,10 @@ func LogNameStatusRepo(ctx context.Context, repository, head, treepath string, p }) if err != nil { _ = stdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String())) - } else { - _ = stdoutWriter.Close() + return } + + _ = stdoutWriter.Close() }() // For simplicities sake we'll us a buffered reader to read from the cat-file --batch @@ -354,7 +356,7 @@ heaploop: } current, err := g.Next(treepath, path2idx, changed, maxpathlen) if err != nil { - if err == context.DeadlineExceeded { + if errors.Is(err, context.DeadlineExceeded) { break heaploop } g.Close() |