From 9d712b91ffecb0e85eb783b570a88b10d0548597 Mon Sep 17 00:00:00 2001 From: yusing Date: Mon, 16 Jun 2025 21:36:20 +0800 Subject: [PATCH] fix(rules): routes without default rule panics --- internal/route/rules/rules.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/route/rules/rules.go b/internal/route/rules/rules.go index 4d1dbcc..02378bd 100644 --- a/internal/route/rules/rules.go +++ b/internal/route/rules/rules.go @@ -54,7 +54,13 @@ type ( // if no rule matches and default rule is not set, // the request is passed to the upstream. func (rules Rules) BuildHandler(caller string, up http.Handler) http.HandlerFunc { - var defaultRule *Rule + defaultRule := &Rule{ + Name: "default", + Do: Command{ + raw: "pass", + exec: BypassCommand{}, + }, + } nonDefaultRules := make(Rules, 0, len(rules)) for i, rule := range rules { @@ -79,6 +85,10 @@ func (rules Rules) BuildHandler(caller string, up http.Handler) http.HandlerFunc } } + if len(nonDefaultRules) == 0 { + nonDefaultRules = rules + } + return func(w http.ResponseWriter, r *http.Request) { cache := NewCache() defer cache.Release()