From 5fb9dfcfeeb8294d4d2e8a7b3e496eed5c3f2a9d Mon Sep 17 00:00:00 2001 From: wweir Date: Sat, 25 Apr 2026 03:06:25 +0800 Subject: [PATCH] fix(router): skip empty country mmdb --- router/router.go | 12 ++++++++---- router/router_test.go | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/router/router.go b/router/router.go index b848dd5..8d5fb66 100644 --- a/router/router.go +++ b/router/router.go @@ -6,6 +6,7 @@ import ( "log/slog" "net" "strconv" + "strings" "sync" "time" @@ -63,10 +64,13 @@ func NewRouter(serveIPs []string, upstreamDNS, fallbackDNS, mmdbFile string, pro } } - var err error - r.country.Reader, err = geoip2.Open(mmdbFile) - if err != nil { - slog.Warn("open geoip2 db", "error", err, "file", mmdbFile) + mmdbFile = strings.TrimSpace(mmdbFile) + if mmdbFile != "" { + var err error + r.country.Reader, err = geoip2.Open(mmdbFile) + if err != nil { + slog.Warn("open geoip2 db", "error", err, "file", mmdbFile) + } } return &r diff --git a/router/router_test.go b/router/router_test.go index c2c9a56..3bd3040 100644 --- a/router/router_test.go +++ b/router/router_test.go @@ -1,8 +1,10 @@ package router import ( + "bytes" "errors" "io" + "log/slog" "net" "net/http" "strings" @@ -142,6 +144,26 @@ func TestAddCountryCIDRsSkipsInvalidEntries(t *testing.T) { } } +func TestNewRouterSkipsEmptyCountryMMDB(t *testing.T) { + var logs bytes.Buffer + previous := slog.Default() + slog.SetDefault(slog.New(slog.NewTextHandler(&logs, nil))) + t.Cleanup(func() { + slog.SetDefault(previous) + }) + + for _, mmdbFile := range []string{"", " "} { + r := NewRouter(nil, "", "223.5.5.5", mmdbFile, nil) + if r.country.Reader != nil { + t.Fatalf("expected empty MMDB %q to disable GeoIP lookup", mmdbFile) + } + } + + if strings.Contains(logs.String(), "open geoip2 db") { + t.Fatalf("empty MMDB should not emit open warning, logs: %s", logs.String()) + } +} + func TestIsAccessChecksRequestedPortOnly(t *testing.T) { t.Parallel()