Skip to content

Commit

Permalink
If rendering has failed due to a net.OpError stop rendering (go-gitea…
Browse files Browse the repository at this point in the history
…#18642)

Backport go-gitea#18642

When a net.OpError occurs during rendering the underlying connection is essentially
dead and therefore attempting to render further data will only cause further errors.

Therefore in serverErrorInternal detect if the passed in error is an OpError and
if so do not attempt any further rendering.

Fix go-gitea#18629

Signed-off-by: Andrew Thornton <[email protected]>
  • Loading branch information
zeripath committed Feb 6, 2022
1 parent bb77e6c commit 5a8fca2
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions modules/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ import (
"context"
"crypto/sha256"
"encoding/hex"
"errors"
"html"
"html/template"
"io"
"net"
"net/http"
"net/url"
"path"
Expand Down Expand Up @@ -264,6 +266,12 @@ func (ctx *Context) ServerError(logMsg string, logErr error) {
func (ctx *Context) serverErrorInternal(logMsg string, logErr error) {
if logErr != nil {
log.ErrorWithSkip(2, "%s: %v", logMsg, logErr)
if errors.Is(logErr, &net.OpError{}) {
// This is an error within the underlying connection
// and further rendering will not work so just return
return
}

if !setting.IsProd {
ctx.Data["ErrorMsg"] = logErr
}
Expand Down

0 comments on commit 5a8fca2

Please sign in to comment.