From: Diogo Franco (Kovensky) Date: Tue, 16 Jul 2013 16:16:54 +0000 (-0300) Subject: anidb: Immediately return error for clearly invalid IDs X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=522207c827fcab8c51cbb88d2c3a916950dba4bd;p=go-anidb.git anidb: Immediately return error for clearly invalid IDs --- diff --git a/animecache.go b/animecache.go index b223fe3..3299034 100644 --- a/animecache.go +++ b/animecache.go @@ -59,6 +59,11 @@ func (adb *AniDB) AnimeByID(aid AID) <-chan *Anime { keys := []cacheKey{"aid", aid} ch := make(chan *Anime, 1) + if aid < 1 { + ch <- nil + close(ch) + } + ic := make(chan Cacheable, 1) go func() { ch <- (<-ic).(*Anime); close(ch) }() if intentMap.Intent(ic, keys...) { diff --git a/episodecache.go b/episodecache.go index 67d12b0..ad289c1 100644 --- a/episodecache.go +++ b/episodecache.go @@ -48,6 +48,12 @@ func (adb *AniDB) EpisodeByID(eid EID) <-chan *Episode { keys := []cacheKey{"eid", eid} ch := make(chan *Episode, 1) + if eid < 1 { + ch <- nil + close(ch) + return ch + } + ic := make(chan Cacheable, 1) go func() { ch <- (<-ic).(*Episode); close(ch) }() if intentMap.Intent(ic, keys...) { diff --git a/filecache.go b/filecache.go index 3c94d47..026cd13 100644 --- a/filecache.go +++ b/filecache.go @@ -6,6 +6,7 @@ import ( "github.com/Kovensky/go-anidb/udp" "image" "log" + "regexp" "strconv" "strings" "time" @@ -86,6 +87,12 @@ func (adb *AniDB) FileByID(fid FID) <-chan *File { ch := make(chan *File, 1) + if fid < 1 { + ch <- nil + close(ch) + return ch + } + ic := make(chan Cacheable, 1) go func() { ch <- (<-ic).(*File); close(ch) }() if intentMap.Intent(ic, keys...) { @@ -125,12 +132,22 @@ func (adb *AniDB) FileByID(fid FID) <-chan *File { return ch } +var validEd2kHash = regexp.MustCompile(`\A[:xdigit:]{32}\z`) + // Retrieves a File by its Ed2kHash + Filesize combination. Uses the UDP API. func (adb *AniDB) FileByEd2kSize(ed2k string, size int64) <-chan *File { keys := []cacheKey{"fid", "by-ed2k", ed2k, size} ch := make(chan *File, 1) + if size < 1 || !validEd2kHash.MatchString(ed2k) { + ch <- nil + close(ch) + return ch + } + // AniDB always uses lower case hashes + ed2k = strings.ToLower(ed2k) + ic := make(chan Cacheable, 1) go func() { fid := (<-ic).(FID) diff --git a/groupcache.go b/groupcache.go index deed538..b73665e 100644 --- a/groupcache.go +++ b/groupcache.go @@ -61,6 +61,12 @@ func (adb *AniDB) GroupByID(gid GID) <-chan *Group { keys := []cacheKey{"gid", gid} ch := make(chan *Group, 1) + if gid < 1 { + ch <- nil + close(ch) + return ch + } + ic := make(chan Cacheable, 1) go func() { ch <- (<-ic).(*Group); close(ch) }() if intentMap.Intent(ic, keys...) { @@ -105,6 +111,12 @@ func (adb *AniDB) GroupByName(gname string) <-chan *Group { altKeys := []cacheKey{"gid", "by-shortname", gname} ch := make(chan *Group, 1) + if gname == "" { + ch <- nil + close(ch) + return ch + } + ic := make(chan Cacheable, 1) go func() { gid := (<-ic).(GID) diff --git a/titles.go b/titles.go index 19f56a1..da36e31 100644 --- a/titles.go +++ b/titles.go @@ -17,6 +17,9 @@ func SearchAnime(name string) AID { // Searches for all anime that match the given anime name, case sensitive. func SearchAnimeAll(name string) titles.ResultSet { + if name == "" { + return nil + } return titlesDB.FuzzySearch(name) } @@ -33,5 +36,8 @@ func SearchAnimeFold(name string) AID { // Searches for all anime that match the given anime name, case folding. func SearchAnimeFoldAll(name string) titles.ResultSet { + if name == "" { + return nil + } return titlesDB.FuzzySearchFold(name) }