fix(router): skip empty country mmdb

This commit is contained in:
wweir
2026-04-25 03:17:45 +08:00
parent f72d88b204
commit 5fb9dfcfee
2 changed files with 30 additions and 4 deletions
+8 -4
View File
@@ -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
+22
View File
@@ -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()