aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/feed/handler.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-01-04 18:32:36 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-01-04 18:41:23 -0800
commit7d278d49f1da6b8dc8b31faf46d4127db5f7f711 (patch)
treed471c1e2ef42d40f8124a314e08e7e95eb0ea77f /reader/feed/handler.go
parentc57cafbef28a8a12cae02674b3c36979acb0e576 (diff)
Add content length check when refreshing feeds
Diffstat (limited to 'reader/feed/handler.go')
-rw-r--r--reader/feed/handler.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/reader/feed/handler.go b/reader/feed/handler.go
index 35ad388..8b5658e 100644
--- a/reader/feed/handler.go
+++ b/reader/feed/handler.go
@@ -25,6 +25,7 @@ var (
errNotFound = "Feed %d not found"
errEncoding = "Unable to normalize encoding: %v."
errCategoryNotFound = "Category not found for this user."
+ errEmptyFeed = "This feed is empty"
)
// Handler contains all the logic to create and refresh feeds.
@@ -50,6 +51,11 @@ func (h *Handler) CreateFeed(userID, categoryID int64, url string, crawler bool)
return nil, errors.NewLocalizedError(errServerFailure, response.StatusCode)
}
+ // Content-Length = -1 when no Content-Length header is sent
+ if response.ContentLength == 0 {
+ return nil, errors.NewLocalizedError(errEmptyFeed)
+ }
+
if h.store.FeedURLExists(userID, response.EffectiveURL) {
return nil, errors.NewLocalizedError(errDuplicate, response.EffectiveURL)
}
@@ -133,6 +139,16 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
if response.IsModified(originalFeed.EtagHeader, originalFeed.LastModifiedHeader) {
logger.Debug("[Handler:RefreshFeed] Feed #%d has been modified", feedID)
+
+ // Content-Length = -1 when no Content-Length header is sent
+ if response.ContentLength == 0 {
+ err := errors.NewLocalizedError(errEmptyFeed)
+ originalFeed.ParsingErrorCount++
+ originalFeed.ParsingErrorMsg = err.Error()
+ h.store.UpdateFeed(originalFeed)
+ return err
+ }
+
body, err := response.NormalizeBodyEncoding()
if err != nil {
return errors.NewLocalizedError(errEncoding, err)