diff options
| author | Loyalsoldier <[email protected]> | 2024-08-06 02:45:36 +0800 |
|---|---|---|
| committer | Loyalsoldier <[email protected]> | 2024-08-06 02:45:36 +0800 |
| commit | 873e3723c3a7126deb24b77a2dc350b2536de8de (patch) | |
| tree | b8d5ca4fb915d9b48dda969a96d9272c8d36db91 /plugin | |
| parent | ac37ef68e0d93d971c9c501c9da6de07a3e66e35 (diff) | |
Fix: parsing CIDR in Clash & Surge ruleset
Diffstat (limited to 'plugin')
| -rw-r--r-- | plugin/plaintext/common_in.go | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/plugin/plaintext/common_in.go b/plugin/plaintext/common_in.go index 7b717aea..f5be6aa6 100644 --- a/plugin/plaintext/common_in.go +++ b/plugin/plaintext/common_in.go @@ -110,9 +110,17 @@ func (t *textIn) scanFileForClashClassicalRuleSetIn(reader io.Reader, entry *lib continue } + // Examples: + // IP-CIDR,162.208.16.0/24 + // IP-CIDR6,2a0b:e40:1::/48 + // IP-CIDR,162.208.16.0/24,no-resolve + // IP-CIDR6,2a0b:e40:1::/48,no-resolve if strings.HasPrefix(line, "ip-cidr,") || strings.HasPrefix(line, "ip-cidr6,") { - _, line, _ = strings.Cut(line, ",") - line = strings.TrimSpace(line) + parts := strings.Split(line, ",") + if len(parts) < 2 { + continue + } + line = strings.TrimSpace(parts[1]) if line == "" { continue } @@ -128,17 +136,27 @@ func (t *textIn) scanFileForClashClassicalRuleSetIn(reader io.Reader, entry *lib func (t *textIn) scanFileForSurgeRuleSetIn(reader io.Reader, entry *lib.Entry) error { scanner := bufio.NewScanner(reader) for scanner.Scan() { - line := strings.ToLower(strings.TrimSpace(scanner.Text())) + line := scanner.Text() + + line, _, _ = strings.Cut(line, "#") + line, _, _ = strings.Cut(line, "//") + line, _, _ = strings.Cut(line, "/*") + line = strings.ToLower(strings.TrimSpace(line)) if line == "" { continue } + // Examples: + // IP-CIDR,162.208.16.0/24 + // IP-CIDR6,2a0b:e40:1::/48 + // IP-CIDR,162.208.16.0/24,no-resolve + // IP-CIDR6,2a0b:e40:1::/48,no-resolve if strings.HasPrefix(line, "ip-cidr,") || strings.HasPrefix(line, "ip-cidr6,") { - line, _, _ = strings.Cut(line, "#") - line, _, _ = strings.Cut(line, "//") - line, _, _ = strings.Cut(line, "/*") - _, line, _ = strings.Cut(line, ",") - line = strings.TrimSpace(line) + parts := strings.Split(line, ",") + if len(parts) < 2 { + continue + } + line = strings.TrimSpace(parts[1]) if line == "" { continue } |
