]> git.lizzy.rs Git - go-anidb.git/commitdiff
anidb: Immediately return error for clearly invalid IDs
authorDiogo Franco (Kovensky) <diogomfranco@gmail.com>
Tue, 16 Jul 2013 16:16:54 +0000 (13:16 -0300)
committerDiogo Franco (Kovensky) <diogomfranco@gmail.com>
Tue, 16 Jul 2013 16:16:54 +0000 (13:16 -0300)
animecache.go
episodecache.go
filecache.go
groupcache.go
titles.go

index b223fe3a4028405faac153700f6cab1c276b0cda..3299034051b2ecedf4e10c176919a3f2462bcdd4 100644 (file)
@@ -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...) {
index 67d12b0fefaab471f407d2cbca53313987a2a447..ad289c12fec3c58f392f43657bdcf0b6da12a41b 100644 (file)
@@ -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...) {
index 3c94d47f97264737252c00f6a2cacd7cf927873d..026cd13903e6fe3801d71fcfbd2b050023f27922 100644 (file)
@@ -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)
index deed5387679396895b18d2585d4990353f3e139c..b73665e7385c89217f927e62ffa5771d13f0356a 100644 (file)
@@ -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)
index 19f56a172a0dc070a7659718980178a1be3adc69..da36e313075b58af5318cbec2d099f85fe912a91 100644 (file)
--- 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)
 }