aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/feed
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2017-11-20 17:12:37 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2017-11-20 17:12:37 -0800
commitaecda64030ef1231244b8b2ab8be0174f6bfd992 (patch)
tree3eec7b30f7136cd17a891fc0260915caae17eef3 /reader/feed
parent0e6717b7c86a1761b1ae515dd212a78f1d1e7c8b (diff)
Make sure XML feeds are always encoded in UTF-8
Diffstat (limited to 'reader/feed')
-rw-r--r--reader/feed/handler.go23
1 files changed, 17 insertions, 6 deletions
diff --git a/reader/feed/handler.go b/reader/feed/handler.go
index 27ff126..c046ad9 100644
--- a/reader/feed/handler.go
+++ b/reader/feed/handler.go
@@ -6,14 +6,15 @@ package feed
import (
"fmt"
+ "log"
+ "time"
+
"github.com/miniflux/miniflux2/errors"
"github.com/miniflux/miniflux2/helper"
"github.com/miniflux/miniflux2/model"
"github.com/miniflux/miniflux2/reader/http"
"github.com/miniflux/miniflux2/reader/icon"
"github.com/miniflux/miniflux2/storage"
- "log"
- "time"
)
var (
@@ -21,6 +22,7 @@ var (
errServerFailure = "Unable to fetch feed (statusCode=%d)."
errDuplicate = "This feed already exists (%s)."
errNotFound = "Feed %d not found"
+ errEncoding = "Unable to normalize encoding: %v."
)
// Handler contains all the logic to create and refresh feeds.
@@ -32,7 +34,7 @@ type Handler struct {
func (h *Handler) CreateFeed(userID, categoryID int64, url string) (*model.Feed, error) {
defer helper.ExecutionTime(time.Now(), fmt.Sprintf("[Handler:CreateFeed] feedUrl=%s", url))
- client := http.NewHttpClient(url)
+ client := http.NewClient(url)
response, err := client.Get()
if err != nil {
return nil, errors.NewLocalizedError(errRequestFailed, err)
@@ -46,7 +48,12 @@ func (h *Handler) CreateFeed(userID, categoryID int64, url string) (*model.Feed,
return nil, errors.NewLocalizedError(errDuplicate, response.EffectiveURL)
}
- subscription, err := parseFeed(response.Body)
+ body, err := response.NormalizeBodyEncoding()
+ if err != nil {
+ return nil, errors.NewLocalizedError(errEncoding, err)
+ }
+
+ subscription, err := parseFeed(body)
if err != nil {
return nil, err
}
@@ -89,7 +96,7 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
return errors.NewLocalizedError(errNotFound, feedID)
}
- client := http.NewHttpClientWithCacheHeaders(originalFeed.FeedURL, originalFeed.EtagHeader, originalFeed.LastModifiedHeader)
+ client := http.NewClientWithCacheHeaders(originalFeed.FeedURL, originalFeed.EtagHeader, originalFeed.LastModifiedHeader)
response, err := client.Get()
if err != nil {
customErr := errors.NewLocalizedError(errRequestFailed, err)
@@ -111,8 +118,12 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
if response.IsModified(originalFeed.EtagHeader, originalFeed.LastModifiedHeader) {
log.Printf("[Handler:RefreshFeed] Feed #%d has been modified\n", feedID)
+ body, err := response.NormalizeBodyEncoding()
+ if err != nil {
+ return errors.NewLocalizedError(errEncoding, err)
+ }
- subscription, err := parseFeed(response.Body)
+ subscription, err := parseFeed(body)
if err != nil {
originalFeed.ParsingErrorCount++
originalFeed.ParsingErrorMsg = err.Error()