mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-27 06:03:48 +03:00
caddyhttp: Clear out matcher error immediately after grabbing it (#4916)
Co-authored-by: Matthew Holt <mholt@users.noreply.github.com>
This commit is contained in:
parent
4fced0b6e1
commit
ff2ba6de8a
2 changed files with 14 additions and 0 deletions
|
@ -204,6 +204,10 @@ func wrapRoute(route Route) Middleware {
|
|||
// the request and trigger the error handling chain
|
||||
err, ok := GetVar(req.Context(), MatcherErrorVarKey).(error)
|
||||
if ok {
|
||||
// clear out the error from context, otherwise
|
||||
// it will cascade to the error routes (#4916)
|
||||
SetVar(req.Context(), MatcherErrorVarKey, nil)
|
||||
// return the matcher's error
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
@ -301,11 +301,21 @@ func GetVar(ctx context.Context, key string) interface{} {
|
|||
// SetVar sets a value in the context's variable table with
|
||||
// the given key. It overwrites any previous value with the
|
||||
// same key.
|
||||
//
|
||||
// If the value is nil (note: non-nil interface with nil
|
||||
// underlying value does not count) and the key exists in
|
||||
// the table, the key+value will be deleted from the table.
|
||||
func SetVar(ctx context.Context, key string, value interface{}) {
|
||||
varMap, ok := ctx.Value(VarsCtxKey).(map[string]interface{})
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if value == nil {
|
||||
if _, ok := varMap[key]; ok {
|
||||
delete(varMap, key)
|
||||
return
|
||||
}
|
||||
}
|
||||
varMap[key] = value
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue