From 8d512d55e59b4e24383d449325b77661b89741c3 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Tue, 21 Apr 2026 12:55:16 +0200 Subject: [PATCH] revert Fix geosite:ru rule (ram leak) #4050 #4055 --- go.mod | 4 ++-- go.sum | 4 ++-- web/service/server.go | 56 ------------------------------------------- web/web.go | 18 -------------- 4 files changed, 4 insertions(+), 78 deletions(-) diff --git a/go.mod b/go.mod index e8dcecc1..331261f8 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,6 @@ require ( golang.org/x/sys v0.43.0 golang.org/x/text v0.36.0 google.golang.org/grpc v1.80.0 - google.golang.org/protobuf v1.36.11 gorm.io/driver/sqlite v1.6.0 gorm.io/gorm v1.31.1 ) @@ -96,7 +95,8 @@ require ( golang.org/x/tools v0.44.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/protobuf v1.36.11 // indirect gvisor.dev/gvisor v0.0.0-20260122175437-89a5d21be8f0 // indirect lukechampine.com/blake3 v1.4.1 // indirect ) diff --git a/go.sum b/go.sum index 0429dcc8..45931b83 100644 --- a/go.sum +++ b/go.sum @@ -256,8 +256,8 @@ golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb h1:whnFRlWMcXI9d+Z golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb/go.mod h1:rpwXGsirqLqN2L0JDJQlwOboGHmptD5ZD6T2VmcqhTw= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= diff --git a/web/service/server.go b/web/service/server.go index 6869cdf3..3292bbab 100644 --- a/web/service/server.go +++ b/web/service/server.go @@ -34,8 +34,6 @@ import ( "github.com/shirou/gopsutil/v4/load" "github.com/shirou/gopsutil/v4/mem" "github.com/shirou/gopsutil/v4/net" - "github.com/xtls/xray-core/app/router" - "google.golang.org/protobuf/proto" ) // ProcessState represents the current state of a system process. @@ -1057,48 +1055,6 @@ func (s *ServerService) IsValidGeofileName(filename string) bool { return matched } -// NormalizeGeositeCountryCodes reads a geosite .dat file, uppercases all -// country_code fields, and writes it back. This works around a case-sensitivity -// mismatch in Xray-core: the router normalizes codes to uppercase before lookup, -// but the find() function compares bytes case-sensitively. Some geosite.dat -// providers (e.g. Loyalsoldier) store codes in lowercase, causing lookup failures. -func NormalizeGeositeCountryCodes(path string) error { - data, err := os.ReadFile(path) - if err != nil { - return fmt.Errorf("failed to read geosite file %s: %w", path, err) - } - - var list router.GeoSiteList - if err := proto.Unmarshal(data, &list); err != nil { - return fmt.Errorf("failed to parse geosite file %s: %w", path, err) - } - - changed := false - for _, entry := range list.Entry { - upper := strings.ToUpper(entry.CountryCode) - if entry.CountryCode != upper { - entry.CountryCode = upper - changed = true - } - } - - if !changed { - return nil - } - - normalized, err := proto.Marshal(&list) - if err != nil { - return fmt.Errorf("failed to serialize normalized geosite file %s: %w", path, err) - } - - if err := os.WriteFile(path, normalized, 0o644); err != nil { - return fmt.Errorf("failed to write normalized geosite file %s: %w", path, err) - } - - logger.Infof("Normalized country codes to uppercase in %s (%d entries)", path, len(list.Entry)) - return nil -} - func (s *ServerService) UpdateGeofile(fileName string) error { type geofileEntry struct { URL string @@ -1190,22 +1146,12 @@ func (s *ServerService) UpdateGeofile(fileName string) error { var errorMessages []string - normalizeIfGeosite := func(destPath, name string) { - if strings.Contains(name, "geosite") { - if err := NormalizeGeositeCountryCodes(destPath); err != nil { - logger.Warningf("Failed to normalize geosite country codes in %s: %v", name, err) - } - } - } - if fileName == "" { // Download all geofiles for _, entry := range geofileAllowlist { destPath := filepath.Join(config.GetBinFolderPath(), entry.FileName) if err := downloadFile(entry.URL, destPath); err != nil { errorMessages = append(errorMessages, fmt.Sprintf("Error downloading Geofile '%s': %v", entry.FileName, err)) - } else { - normalizeIfGeosite(destPath, entry.FileName) } } } else { @@ -1213,8 +1159,6 @@ func (s *ServerService) UpdateGeofile(fileName string) error { destPath := filepath.Join(config.GetBinFolderPath(), entry.FileName) if err := downloadFile(entry.URL, destPath); err != nil { errorMessages = append(errorMessages, fmt.Sprintf("Error downloading Geofile '%s': %v", entry.FileName, err)) - } else { - normalizeIfGeosite(destPath, entry.FileName) } } diff --git a/web/web.go b/web/web.go index 81868d36..835e82e1 100644 --- a/web/web.go +++ b/web/web.go @@ -12,7 +12,6 @@ import ( "net" "net/http" "os" - "path/filepath" "strconv" "strings" "time" @@ -295,26 +294,9 @@ func (s *Server) initRouter() (*gin.Engine, error) { return engine, nil } -// normalizeExistingGeositeFiles normalizes country codes in all geosite .dat -// files found in the bin directory so Xray-core can locate entries correctly. -func normalizeExistingGeositeFiles() { - binDir := config.GetBinFolderPath() - matches, err := filepath.Glob(filepath.Join(binDir, "geosite*.dat")) - if err != nil { - logger.Warningf("Failed to glob geosite files: %v", err) - return - } - for _, path := range matches { - if err := service.NormalizeGeositeCountryCodes(path); err != nil { - logger.Warningf("Failed to normalize geosite country codes in %s: %v", path, err) - } - } -} - // startTask schedules background jobs (Xray checks, traffic jobs, cron // jobs) which the panel relies on for periodic maintenance and monitoring. func (s *Server) startTask() { - normalizeExistingGeositeFiles() s.customGeoService.EnsureOnStartup() err := s.xrayService.RestartXray(true) if err != nil {