aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/feed
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-01-19 22:42:55 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-01-20 13:25:21 -0800
commit713b38e34c6d4a232af871659793bb9674e020f7 (patch)
tree7f7797e140334d6ad69974cbce7e5f3746d31c6b /reader/feed
parent3b62f904d6d3fdad168d3b212ff7c465c01b50f4 (diff)
Handle more encoding edge cases
- Feeds with charset specified only in Content-Type header and not in XML document - Feeds with charset specified in both places - Feeds with charset specified only in XML document and not in HTTP header
Diffstat (limited to 'reader/feed')
-rw-r--r--reader/feed/parser.go13
1 files changed, 6 insertions, 7 deletions
diff --git a/reader/feed/parser.go b/reader/feed/parser.go
index e612f39..a2b39ed 100644
--- a/reader/feed/parser.go
+++ b/reader/feed/parser.go
@@ -14,12 +14,11 @@ import (
"github.com/miniflux/miniflux/model"
"github.com/miniflux/miniflux/reader/atom"
+ "github.com/miniflux/miniflux/reader/encoding"
"github.com/miniflux/miniflux/reader/json"
"github.com/miniflux/miniflux/reader/rdf"
"github.com/miniflux/miniflux/reader/rss"
"github.com/miniflux/miniflux/timer"
-
- "golang.org/x/net/html/charset"
)
// List of feed formats.
@@ -32,14 +31,14 @@ const (
)
// DetectFeedFormat detect feed format from input data.
-func DetectFeedFormat(data io.Reader) string {
+func DetectFeedFormat(r io.Reader) string {
defer timer.ExecutionTime(time.Now(), "[Feed:DetectFeedFormat]")
var buffer bytes.Buffer
- tee := io.TeeReader(data, &buffer)
+ tee := io.TeeReader(r, &buffer)
decoder := xml.NewDecoder(tee)
- decoder.CharsetReader = charset.NewReaderLabel
+ decoder.CharsetReader = encoding.CharsetReader
for {
token, _ := decoder.Token()
@@ -66,11 +65,11 @@ func DetectFeedFormat(data io.Reader) string {
return FormatUnknown
}
-func parseFeed(data io.Reader) (*model.Feed, error) {
+func parseFeed(r io.Reader) (*model.Feed, error) {
defer timer.ExecutionTime(time.Now(), "[Feed:ParseFeed]")
var buffer bytes.Buffer
- io.Copy(&buffer, data)
+ io.Copy(&buffer, r)
reader := bytes.NewReader(buffer.Bytes())
format := DetectFeedFormat(reader)