Browse Source

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

+ a couple other minor changes from linter
master
Matthew Holt 5 years ago
parent
commit
00e99df209
No known key found for this signature in database GPG Key ID: 2A349DD577D586A5
  1. 2
      caddyconfig/httpcaddyfile/builtins.go
  2. 45
      caddyconfig/httpcaddyfile/directives.go
  3. 5
      caddyconfig/httpcaddyfile/httptype.go

2
caddyconfig/httpcaddyfile/builtins.go

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

45
caddyconfig/httpcaddyfile/directives.go

@ -283,27 +283,32 @@ func sortRoutes(routes []ConfigValue) {
return false 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
// use already-decoded matcher, or decode if it's the first time seeing it iPM, jPM := decodedMatchers[i], decodedMatchers[j]
iPM, jPM := decodedMatchers[i], decodedMatchers[j] if iPM == nil && len(iRoute.MatcherSetsRaw) == 1 {
if iPM == nil { var pathMatcher caddyhttp.MatchPath
var pathMatcher caddyhttp.MatchPath _ = json.Unmarshal(iRoute.MatcherSetsRaw[0]["path"], &pathMatcher)
_ = json.Unmarshal(iRoute.MatcherSetsRaw[0]["path"], &pathMatcher) decodedMatchers[i] = pathMatcher
decodedMatchers[i] = pathMatcher iPM = pathMatcher
iPM = pathMatcher }
} if jPM == nil && len(jRoute.MatcherSetsRaw) == 1 {
if jPM == nil { var pathMatcher caddyhttp.MatchPath
var pathMatcher caddyhttp.MatchPath _ = json.Unmarshal(jRoute.MatcherSetsRaw[0]["path"], &pathMatcher)
_ = json.Unmarshal(jRoute.MatcherSetsRaw[0]["path"], &pathMatcher) decodedMatchers[j] = pathMatcher
decodedMatchers[j] = pathMatcher jPM = pathMatcher
jPM = pathMatcher }
}
// if there is only one path in the matcher, sort by // if there is only one path in the matcher, sort by
// longer path (more specific) first // longer path (more specific) first; if one of the
if len(iPM) == 1 && len(jPM) == 1 { // routes doesn't have a matcher, then it's treated
return len(iPM[0]) > len(jPM[0]) // 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])
} }
} }

5
caddyconfig/httpcaddyfile/httptype.go

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

Loading…
Cancel
Save