From 0fb87eba3f763658e3bf864a9cf78adbdae590c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Guillot?= Date: Wed, 7 Feb 2018 18:47:47 -0800 Subject: [PATCH] Improve error handling when the response is empty --- locale/translations.go | 7 ++++--- locale/translations/fr_FR.json | 3 ++- reader/feed/parser.go | 5 ++++- reader/feed/parser_test.go | 7 +++++++ reader/subscription/finder.go | 12 +++++++++++- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/locale/translations.go b/locale/translations.go index 0291ebdd..d626b895 100644 --- a/locale/translations.go +++ b/locale/translations.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2018-02-07 12:24:51.492778 +0100 CET m=+0.025245211 +// 2018-02-07 18:40:34.783083402 -0800 PST m=+0.035977512 package locale @@ -439,7 +439,8 @@ var translations = map[string]string{ "Fever API endpoint:": "Point de terminaison de l'API Fever :", "Miniflux API": "API de Miniflux", "API Endpoint": "Point de terminaison de l'API", - "Your account password": "Le mot de passe de votre compte" + "Your account password": "Le mot de passe de votre compte", + "This web page is empty": "Cette page web est vide" } `, } @@ -447,5 +448,5 @@ var translations = map[string]string{ var translationsChecksums = map[string]string{ "de_DE": "f4a66bffedb7bf99294281da5a1fa78901509db67a9fba15a160b656feb1425a", "en_US": "6fe95384260941e8a5a3c695a655a932e0a8a6a572c1e45cb2b1ae8baa01b897", - "fr_FR": "eb05f9d8cf36bf943388f4027fede1c565576ccdd38b71c5ed1bb18cb60744f4", + "fr_FR": "3b8f4d329ca851f461c973bbdb77459006ba7b4d9bd49139d4002af67b4c3d4e", } diff --git a/locale/translations/fr_FR.json b/locale/translations/fr_FR.json index 2dae3447..9e64dde1 100644 --- a/locale/translations/fr_FR.json +++ b/locale/translations/fr_FR.json @@ -209,5 +209,6 @@ "Fever API endpoint:": "Point de terminaison de l'API Fever :", "Miniflux API": "API de Miniflux", "API Endpoint": "Point de terminaison de l'API", - "Your account password": "Le mot de passe de votre compte" + "Your account password": "Le mot de passe de votre compte", + "This web page is empty": "Cette page web est vide" } diff --git a/reader/feed/parser.go b/reader/feed/parser.go index a2b39edc..c04836a6 100644 --- a/reader/feed/parser.go +++ b/reader/feed/parser.go @@ -69,7 +69,10 @@ func parseFeed(r io.Reader) (*model.Feed, error) { defer timer.ExecutionTime(time.Now(), "[Feed:ParseFeed]") var buffer bytes.Buffer - io.Copy(&buffer, r) + size, _ := io.Copy(&buffer, r) + if size == 0 { + return nil, errors.New("This feed is empty") + } reader := bytes.NewReader(buffer.Bytes()) format := DetectFeedFormat(reader) diff --git a/reader/feed/parser_test.go b/reader/feed/parser_test.go index b201cafc..31dbedf2 100644 --- a/reader/feed/parser_test.go +++ b/reader/feed/parser_test.go @@ -205,3 +205,10 @@ func TestParseUnknownFeed(t *testing.T) { t.Error("ParseFeed must returns an error") } } + +func TestParseEmptyFeed(t *testing.T) { + _, err := parseFeed(bytes.NewBufferString("")) + if err == nil { + t.Error("ParseFeed must returns an error") + } +} diff --git a/reader/subscription/finder.go b/reader/subscription/finder.go index 835991ca..8e361b7e 100644 --- a/reader/subscription/finder.go +++ b/reader/subscription/finder.go @@ -23,6 +23,7 @@ import ( var ( errConnectionFailure = "Unable to open this link: %v" errUnreadableDoc = "Unable to analyze this page: %v" + errEmptyBody = "This web page is empty" ) // FindSubscriptions downloads and try to find one or more subscriptions from an URL. @@ -35,13 +36,22 @@ func FindSubscriptions(websiteURL string) (Subscriptions, error) { return nil, errors.NewLocalizedError(errConnectionFailure, err) } + // Content-Length = -1 when no Content-Length header is sent + if response.ContentLength == 0 { + return nil, errors.NewLocalizedError(errEmptyBody) + } + body, err := response.NormalizeBodyEncoding() if err != nil { return nil, err } var buffer bytes.Buffer - io.Copy(&buffer, body) + size, _ := io.Copy(&buffer, body) + if size == 0 { + return nil, errors.NewLocalizedError(errEmptyBody) + } + reader := bytes.NewReader(buffer.Bytes()) if format := feed.DetectFeedFormat(reader); format != feed.FormatUnknown {