summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2022-07-13 23:24:29 +0100
committerGitHub <noreply@github.com>2022-07-14 00:24:29 +0200
commitfe09ee564dc90b261beb7b34801b3176c89483a5 (patch)
treec4973370242ffd4255afb36b43f9cdef8594cedc /modules
parent07ec8288bff6295c7db5558846153a61625af80d (diff)
downloadgitea-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.go8
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()