From 789eb9f24ac72505ef8bd89d6c94a99ba9d7efad Mon Sep 17 00:00:00 2001 From: Evgeny Kuznetsov Date: Wed, 5 Feb 2020 19:51:43 +0300 Subject: parse episodes more safely --- main.go | 7 +++++-- main_test.go | 16 ++++++++++++++++ testdata/episodes.badep.0 | 23 +++++++++++++++++++++++ testdata/episodes.badep.1 | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 testdata/episodes.badep.0 create mode 100644 testdata/episodes.badep.1 diff --git a/main.go b/main.go index 2304b4b..5f990bb 100644 --- a/main.go +++ b/main.go @@ -133,7 +133,10 @@ func populateFeed(feed *feeds.Feed, page []byte) (err error) { if len(episodeUrlRe.FindAllSubmatch(episode, -1)) > 1 { return errBadEpisode } - url, _ := parseSingle(episode, episodeUrlRe) + url, err := parseSingle(episode, episodeUrlRe) + if err != nil { + return errBadEpisode + } episodeUrl := urlPrefix + string(url) title, _ := parseSingle(episode, episodeTitleRe) episodeTitle := string(title) @@ -148,7 +151,7 @@ func populateFeed(feed *feeds.Feed, page []byte) (err error) { Created: date, }) } - return nil + return } func parse(src []byte, re *regexp.Regexp, n int) (out [][]byte, err error) { diff --git a/main_test.go b/main_test.go index 2d520cb..d00a6ae 100644 --- a/main_test.go +++ b/main_test.go @@ -27,6 +27,7 @@ import ( "os/exec" "path/filepath" "regexp" + "strconv" "strings" "sync" "testing" @@ -91,6 +92,21 @@ func TestFeed(t *testing.T) { assertGolden(t, actual, golden) } +func TestBadEpisode(t *testing.T) { + feed := &feeds.Feed{ + Link: &feeds.Link{Href: "http://www.radiorus.ru/brand/57083/episodes"}, + } + + for i := 0; i <= 1; i++ { + page := helperLoadBytes(t, "episodes.badep."+strconv.Itoa(i)) + page = cleanText(page) + + if err := populateFeed(feed, page); err != errBadEpisode { + t.Error("for sample", i, "want:", errBadEpisode, "got:", err) + } + } +} + func TestFindEpisodes(t *testing.T) { var tests = []string{ "episodes", diff --git a/testdata/episodes.badep.0 b/testdata/episodes.badep.0 new file mode 100644 index 0000000..13d82f2 --- /dev/null +++ b/testdata/episodes.badep.0 @@ -0,0 +1,23 @@ +

"Аэростат"

+
+ "Аэростат" + diff --git a/testdata/episodes.badep.1 b/testdata/episodes.badep.1 new file mode 100644 index 0000000..b29fcc8 --- /dev/null +++ b/testdata/episodes.badep.1 @@ -0,0 +1,34 @@ +

"Аэростат"

+ -- cgit v1.2.3