diff options
author | Frédéric Guillot <fred@miniflux.net> | 2017-11-20 17:12:37 -0800 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2017-11-20 17:12:37 -0800 |
commit | aecda64030ef1231244b8b2ab8be0174f6bfd992 (patch) | |
tree | 3eec7b30f7136cd17a891fc0260915caae17eef3 /reader/feed | |
parent | 0e6717b7c86a1761b1ae515dd212a78f1d1e7c8b (diff) |
Make sure XML feeds are always encoded in UTF-8
Diffstat (limited to 'reader/feed')
-rw-r--r-- | reader/feed/handler.go | 23 |
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() |