diff --git a/Build/lib/rules/domainset.ts b/Build/lib/rules/domainset.ts index 624fcb78..df283758 100644 --- a/Build/lib/rules/domainset.ts +++ b/Build/lib/rules/domainset.ts @@ -6,6 +6,7 @@ import type { SingboxSourceFormat } from '../singbox'; import * as tldts from 'tldts-experimental'; import { looseTldtsOpt } from '../../constants/loose-tldts-opt'; import { fastStringCompare } from '../misc'; +import escapeStringRegexp from 'escape-string-regexp-node'; type Preprocessed = string[]; @@ -129,15 +130,16 @@ export class DomainsetOutput extends RuleOutput { for (const keyword of this.domainKeywords) { // Use regex to match keyword - results.push(`/${keyword}/`); + results.push(`/${escapeStringRegexp(keyword)}/`); } for (const ipGroup of [this.ipcidr, this.ipcidrNoResolve]) { for (const ipcidr of ipGroup) { if (ipcidr.endsWith('/32')) { results.push(`||${ipcidr.slice(0, -3)}`); - } else if (ipcidr.endsWith('.0/24')) { - results.push(`||${ipcidr.slice(0, -6)}.*`); + /* else if (ipcidr.endsWith('.0/24')) { + results.push(`||${ipcidr.slice(0, -6)}.*`); + } */ } else { results.push(`||${ipcidr}^`); } diff --git a/package.json b/package.json index 025c918f..754512e3 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "csv-parse": "^5.6.0", "devalue": "^5.1.1", "dns2": "^2.1.0", + "escape-string-regexp-node": "^1.0.2", "fast-cidr-tools": "^0.3.1", "fdir": "^6.4.2", "foxact": "^0.2.41", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fc768f4..d9099a84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,6 +52,9 @@ importers: dns2: specifier: ^2.1.0 version: 2.1.0 + escape-string-regexp-node: + specifier: ^1.0.2 + version: 1.0.2 fast-cidr-tools: specifier: ^0.3.1 version: 0.3.1 @@ -920,6 +923,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp-node@1.0.2: + resolution: {integrity: sha512-tv6v/7vF8ob7vTNPBHJ6cdRGtb9t6wBZJt6ZWzJ5kDacXa3jplof+mmoXYLuEUtFXWw8xwR2wVbT2c20HvVubA==} + escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -2711,6 +2717,8 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp-node@1.0.2: {} + escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {}