diff --git a/go.sum b/go.sum index a625c4a..054e8f1 100644 --- a/go.sum +++ b/go.sum @@ -11,4 +11,5 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13 h1:5jaG59Zhd+8ZXe8C+lgiAGqkOaZBruqrWclLkgAww34= golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/src/feed/atom.go b/src/feed/atom.go index 3cb9b4c..c33af22 100644 --- a/src/feed/atom.go +++ b/src/feed/atom.go @@ -59,7 +59,7 @@ func (links atomLinks) First(rel string) string { func ParseAtom(r io.Reader) (*Feed, error) { srcfeed := atomFeed{} - decoder := xml.NewDecoder(r) + decoder := xmlDecoder(r) if err := decoder.Decode(&srcfeed); err != nil { return nil, err } diff --git a/src/feed/feed.go b/src/feed/feed.go index daaab1a..0e4d656 100644 --- a/src/feed/feed.go +++ b/src/feed/feed.go @@ -19,7 +19,7 @@ func sniff(lookup string) (string, processor) { lookup = strings.TrimSpace(lookup) switch lookup[0] { case '<': - decoder := xml.NewDecoder(strings.NewReader(lookup)) + decoder := xmlDecoder(strings.NewReader(lookup)) for { token, _ := decoder.Token() if token == nil { diff --git a/src/feed/feed_test.go b/src/feed/feed_test.go index addbc39..3d473ba 100644 --- a/src/feed/feed_test.go +++ b/src/feed/feed_test.go @@ -12,6 +12,10 @@ func TestSniff(t *testing.T) { ``, "rdf", }, + { + ``, + "rss", + }, { ``, "rss", diff --git a/src/feed/rdf.go b/src/feed/rdf.go index 2436310..5f6d7f8 100644 --- a/src/feed/rdf.go +++ b/src/feed/rdf.go @@ -27,7 +27,7 @@ type rdfItem struct { func ParseRDF(r io.Reader) (*Feed, error) { srcfeed := rdfFeed{} - decoder := xml.NewDecoder(r) + decoder := xmlDecoder(r) if err := decoder.Decode(&srcfeed); err != nil { return nil, err } diff --git a/src/feed/rss.go b/src/feed/rss.go index 1581545..e11eda2 100644 --- a/src/feed/rss.go +++ b/src/feed/rss.go @@ -6,7 +6,6 @@ package feed import ( "encoding/xml" - "fmt" "io" ) @@ -59,10 +58,9 @@ type rssEnclosure struct { func ParseRSS(r io.Reader) (*Feed, error) { srcfeed := rssFeed{} - decoder := xml.NewDecoder(r) + decoder := xmlDecoder(r) decoder.DefaultSpace = "rss" if err := decoder.Decode(&srcfeed); err != nil { - fmt.Println(err) return nil, err } diff --git a/src/feed/utils.go b/src/feed/utils.go index f538c91..38b626e 100644 --- a/src/feed/utils.go +++ b/src/feed/utils.go @@ -1,6 +1,9 @@ package feed import ( + "encoding/xml" + "io" + "golang.org/x/net/html/charset" "time" ) @@ -13,6 +16,13 @@ func firstNonEmpty(vals ...string) string { return "" } +func xmlDecoder(r io.Reader) *xml.Decoder { + decoder := xml.NewDecoder(r) + decoder.Strict = false + decoder.CharsetReader = charset.NewReaderLabel + return decoder +} + // taken from github.com/mjibson/goread var dateFormats = []string{ time.RFC822, // RSS