Improvements to P2P blocklist scanning errors

This commit is contained in:
Matt Joiner 2015-03-07 17:09:18 +11:00
parent e4dec03a32
commit 1c5bd1855a
2 changed files with 14 additions and 2 deletions

View File

@ -380,12 +380,14 @@ func (cl *Client) setEnvBlocklist() (err error) {
var ranges []iplist.Range
uniqStrs := make(map[string]string)
scanner := bufio.NewScanner(f)
lineNum := 1
for scanner.Scan() {
r, ok, lineErr := iplist.ParseBlocklistP2PLine(scanner.Bytes())
if lineErr != nil {
err = fmt.Errorf("error reading torrent blocklist line: %s", lineErr)
err = fmt.Errorf("error reading torrent blocklist line %d: %s", lineNum, lineErr)
return
}
lineNum++
if !ok {
continue
}

View File

@ -2,6 +2,7 @@ package iplist
import (
"bytes"
"errors"
"fmt"
"net"
"sort"
@ -67,7 +68,16 @@ func ParseBlocklistP2PLine(l []byte) (r Range, ok bool, err error) {
return
}
colon := bytes.IndexByte(l, ':')
hyphen := bytes.IndexByte(l[colon+1:], '-') + colon + 1
if colon == -1 {
err = errors.New("missing colon")
return
}
hyphen := bytes.IndexByte(l[colon+1:], '-')
if hyphen == -1 {
err = errors.New("missing hyphen")
return
}
hyphen += colon + 1
r.Description = string(l[:colon])
r.First = net.ParseIP(string(l[colon+1 : hyphen]))
r.Last = net.ParseIP(string(l[hyphen+1:]))