Skip to content

Commit a8f7e25

Browse files
committed
fix: backticks cannot be used to separate multiple regular expressions in the exclude-filter of proxy-providers
#2259
1 parent 909729c commit a8f7e25

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

adapter/provider/provider.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -331,15 +331,22 @@ func (cp *CompatibleProvider) Close() error {
331331
}
332332

333333
func NewProxiesParser(filter string, excludeFilter string, excludeType string, dialerProxy string, override OverrideSchema) (resource.Parser[[]C.Proxy], error) {
334-
excludeFilterReg, err := regexp2.Compile(excludeFilter, regexp2.None)
335-
if err != nil {
336-
return nil, fmt.Errorf("invalid excludeFilter regex: %w", err)
337-
}
338334
var excludeTypeArray []string
339335
if excludeType != "" {
340336
excludeTypeArray = strings.Split(excludeType, "|")
341337
}
342338

339+
var excludeFilterRegs []*regexp2.Regexp
340+
if excludeFilter != "" {
341+
for _, excludeFilter := range strings.Split(excludeFilter, "`") {
342+
excludeFilterReg, err := regexp2.Compile(excludeFilter, regexp2.None)
343+
if err != nil {
344+
return nil, fmt.Errorf("invalid excludeFilter regex: %w", err)
345+
}
346+
excludeFilterRegs = append(excludeFilterRegs, excludeFilterReg)
347+
}
348+
}
349+
343350
var filterRegs []*regexp2.Regexp
344351
for _, filter := range strings.Split(filter, "`") {
345352
filterReg, err := regexp2.Compile(filter, regexp2.None)
@@ -367,8 +374,9 @@ func NewProxiesParser(filter string, excludeFilter string, excludeType string, d
367374
proxies := []C.Proxy{}
368375
proxiesSet := map[string]struct{}{}
369376
for _, filterReg := range filterRegs {
377+
LOOP1:
370378
for idx, mapping := range schema.Proxies {
371-
if nil != excludeTypeArray && len(excludeTypeArray) > 0 {
379+
if len(excludeTypeArray) > 0 {
372380
mType, ok := mapping["type"]
373381
if !ok {
374382
continue
@@ -377,18 +385,11 @@ func NewProxiesParser(filter string, excludeFilter string, excludeType string, d
377385
if !ok {
378386
continue
379387
}
380-
flag := false
381-
for i := range excludeTypeArray {
382-
if strings.EqualFold(pType, excludeTypeArray[i]) {
383-
flag = true
384-
break
388+
for _, excludeType := range excludeTypeArray {
389+
if strings.EqualFold(pType, excludeType) {
390+
continue LOOP1
385391
}
386-
387-
}
388-
if flag {
389-
continue
390392
}
391-
392393
}
393394
mName, ok := mapping["name"]
394395
if !ok {
@@ -398,9 +399,11 @@ func NewProxiesParser(filter string, excludeFilter string, excludeType string, d
398399
if !ok {
399400
continue
400401
}
401-
if len(excludeFilter) > 0 {
402-
if mat, _ := excludeFilterReg.MatchString(name); mat {
403-
continue
402+
if len(excludeFilterRegs) > 0 {
403+
for _, excludeFilterReg := range excludeFilterRegs {
404+
if mat, _ := excludeFilterReg.MatchString(name); mat {
405+
continue LOOP1
406+
}
404407
}
405408
}
406409
if len(filter) > 0 {

0 commit comments

Comments
 (0)