From 90d0ef033be2b13dc052ac75c88e5d0949bff5bb Mon Sep 17 00:00:00 2001 From: H1JK Date: Fri, 8 Mar 2024 22:42:48 +0800 Subject: [PATCH] chore: Check regex rule expression when initializing --- rules/common/domain_regex.go | 18 ++++++++++-------- rules/parser.go | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/rules/common/domain_regex.go b/rules/common/domain_regex.go index f1eb87e6e..3d961542a 100644 --- a/rules/common/domain_regex.go +++ b/rules/common/domain_regex.go @@ -2,14 +2,13 @@ package common import ( "regexp" - "strings" C "github.com/metacubex/mihomo/constant" ) type DomainRegex struct { *Base - regex string + regex *regexp.Regexp adapter string } @@ -19,8 +18,7 @@ func (dr *DomainRegex) RuleType() C.RuleType { func (dr *DomainRegex) Match(metadata *C.Metadata) (bool, string) { domain := metadata.RuleHost() - match, _ := regexp.MatchString(dr.regex, domain) - return match, dr.adapter + return dr.regex.MatchString(domain), dr.adapter } func (dr *DomainRegex) Adapter() string { @@ -28,15 +26,19 @@ func (dr *DomainRegex) Adapter() string { } func (dr *DomainRegex) Payload() string { - return dr.regex + return dr.regex.String() } -func NewDomainRegex(regex string, adapter string) *DomainRegex { +func NewDomainRegex(regex string, adapter string) (*DomainRegex, error) { + r, err := regexp.Compile(regex) + if err != nil { + return nil, err + } return &DomainRegex{ Base: &Base{}, - regex: strings.ToLower(regex), + regex: r, adapter: adapter, - } + }, nil } //var _ C.Rule = (*DomainRegex)(nil) diff --git a/rules/parser.go b/rules/parser.go index 23f781230..f7df5f491 100644 --- a/rules/parser.go +++ b/rules/parser.go @@ -18,7 +18,7 @@ func ParseRule(tp, payload, target string, params []string, subRules map[string] case "DOMAIN-KEYWORD": parsed = RC.NewDomainKeyword(payload, target) case "DOMAIN-REGEX": - parsed = RC.NewDomainRegex(payload, target) + parsed, parseErr = RC.NewDomainRegex(payload, target) case "GEOSITE": parsed, parseErr = RC.NewGEOSITE(payload, target) case "GEOIP":