Skip to content

Commit

Permalink
Fix: IP-CIDR invalid payload crash
Browse files Browse the repository at this point in the history
  • Loading branch information
Dreamacro committed Mar 30, 2019
1 parent 531f487 commit 2036f8c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
27 changes: 19 additions & 8 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -339,28 +339,39 @@ func parseRules(cfg *rawConfig) ([]C.Rule, error) {
payload = rule[1]
target = rule[2]
default:
return nil, fmt.Errorf("Rules[%d] [- %s] error: format invalid", idx, line)
return nil, fmt.Errorf("Rules[%d] [%s] error: format invalid", idx, line)
}

rule = trimArr(rule)
var parsed C.Rule
switch rule[0] {
case "DOMAIN":
rules = append(rules, R.NewDomain(payload, target))
parsed = R.NewDomain(payload, target)
case "DOMAIN-SUFFIX":
rules = append(rules, R.NewDomainSuffix(payload, target))
parsed = R.NewDomainSuffix(payload, target)
case "DOMAIN-KEYWORD":
rules = append(rules, R.NewDomainKeyword(payload, target))
parsed = R.NewDomainKeyword(payload, target)
case "GEOIP":
rules = append(rules, R.NewGEOIP(payload, target))
parsed = R.NewGEOIP(payload, target)
case "IP-CIDR", "IP-CIDR6":
rules = append(rules, R.NewIPCIDR(payload, target, false))
if rule := R.NewIPCIDR(payload, target, false); rule != nil {
parsed = rule
}
case "SOURCE-IP-CIDR":
rules = append(rules, R.NewIPCIDR(payload, target, true))
if rule := R.NewIPCIDR(payload, target, true); rule != nil {
parsed = rule
}
case "MATCH":
fallthrough
case "FINAL":
rules = append(rules, R.NewMatch(target))
parsed = R.NewMatch(target)
}

if parsed == nil {
return nil, fmt.Errorf("Rules[%d] [%s] error: payload invalid", idx, line)
}

rules = append(rules, parsed)
}

return rules, nil
Expand Down
1 change: 1 addition & 0 deletions rules/ipcidr.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func (i *IPCIDR) Payload() string {
func NewIPCIDR(s string, adapter string, isSourceIP bool) *IPCIDR {
_, ipnet, err := net.ParseCIDR(s)
if err != nil {
return nil
}
return &IPCIDR{
ipnet: ipnet,
Expand Down

0 comments on commit 2036f8c

Please sign in to comment.