summaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorLoyalsoldier <[email protected]>2024-08-06 02:45:36 +0800
committerLoyalsoldier <[email protected]>2024-08-06 02:45:36 +0800
commit873e3723c3a7126deb24b77a2dc350b2536de8de (patch)
treeb8d5ca4fb915d9b48dda969a96d9272c8d36db91 /plugin
parentac37ef68e0d93d971c9c501c9da6de07a3e66e35 (diff)
Fix: parsing CIDR in Clash & Surge ruleset
Diffstat (limited to 'plugin')
-rw-r--r--plugin/plaintext/common_in.go34
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
}