httpcaddyfile: Treat no matchers as 0-len path matchers (fix #3100)

+ a couple other minor changes from linter
This commit is contained in:
Matthew Holt 2020-02-28 13:38:12 -07:00
parent c83d40ccd4
commit 00e99df209
No known key found for this signature in database
GPG Key ID: 2A349DD577D586A5
3 changed files with 26 additions and 26 deletions

View File

@ -37,7 +37,7 @@ func init() {
RegisterHandlerDirective("redir", parseRedir)
RegisterHandlerDirective("respond", parseRespond)
RegisterHandlerDirective("route", parseRoute)
RegisterHandlerDirective("handle", parseSegmentAsSubroute)
RegisterHandlerDirective("handle", parseHandle)
RegisterDirective("handle_errors", parseHandleErrors)
RegisterDirective("log", parseLog)
}

View File

@ -283,16 +283,15 @@ func sortRoutes(routes []ConfigValue) {
return false
}
if len(iRoute.MatcherSetsRaw) == 1 && len(jRoute.MatcherSetsRaw) == 1 {
// use already-decoded matcher, or decode if it's the first time seeing it
iPM, jPM := decodedMatchers[i], decodedMatchers[j]
if iPM == nil {
if iPM == nil && len(iRoute.MatcherSetsRaw) == 1 {
var pathMatcher caddyhttp.MatchPath
_ = json.Unmarshal(iRoute.MatcherSetsRaw[0]["path"], &pathMatcher)
decodedMatchers[i] = pathMatcher
iPM = pathMatcher
}
if jPM == nil {
if jPM == nil && len(jRoute.MatcherSetsRaw) == 1 {
var pathMatcher caddyhttp.MatchPath
_ = json.Unmarshal(jRoute.MatcherSetsRaw[0]["path"], &pathMatcher)
decodedMatchers[j] = pathMatcher
@ -300,12 +299,18 @@ func sortRoutes(routes []ConfigValue) {
}
// if there is only one path in the matcher, sort by
// longer path (more specific) first
if len(iPM) == 1 && len(jPM) == 1 {
// longer path (more specific) first; if one of the
// routes doesn't have a matcher, then it's treated
// like a zero-length path matcher
switch {
case iPM == nil && jPM != nil:
return false
case iPM != nil && jPM == nil:
return true
case iPM != nil && jPM != nil:
return len(iPM[0]) > len(jPM[0])
}
}
}
return dirPositions[iDir] < dirPositions[jDir]
})

View File

@ -1012,11 +1012,6 @@ func (c counter) nextGroup() string {
return name
}
type matcherSetAndTokens struct {
matcherSet caddy.ModuleMap
tokens []caddyfile.Token
}
type namedCustomLog struct {
name string
log *caddy.CustomLog