diff --git a/internal/route/rules/rules.go b/internal/route/rules/rules.go index f8b7e93e..c32d439d 100644 --- a/internal/route/rules/rules.go +++ b/internal/route/rules/rules.go @@ -155,7 +155,7 @@ func ruleOnAlwaysTrue(on RuleOn) bool { func matcherSignature(raw string) (string, bool) { raw = strings.TrimSpace(raw) if raw == "" { - return "", false + return "(any)", true // unconditional rule } andParts := splitAnd(raw) diff --git a/internal/route/rules/rules_test.go b/internal/route/rules/rules_test.go index b507a891..baa66b95 100644 --- a/internal/route/rules/rules_test.go +++ b/internal/route/rules/rules_test.go @@ -124,6 +124,19 @@ header Host example.com { `, want: nil, }, + { + name: "unconditional terminating rule shadows later unconditional rule", + rules: ` +{ + error 404 "not found" +} + +{ + error 403 "forbidden" +} +`, + want: ErrDeadRule, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {