diff options
author | Frédéric Guillot <fred@miniflux.net> | 2017-12-13 20:16:15 -0800 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2017-12-13 20:16:15 -0800 |
commit | 827683ab59131ec38ed7cfa268bcaa6dc77d1412 (patch) | |
tree | 8461fa67142378b050fde4ee39d393e18ab71aaf /reader/rss | |
parent | 84d912c9794eaaef0f06638d9d23716f4e02b42f (diff) |
Make sure that item URL are absolute
Diffstat (limited to 'reader/rss')
-rw-r--r-- | reader/rss/parser_test.go | 21 | ||||
-rw-r--r-- | reader/rss/rss.go | 15 |
2 files changed, 31 insertions, 5 deletions
diff --git a/reader/rss/parser_test.go b/reader/rss/parser_test.go index 982d4f0..7d72417 100644 --- a/reader/rss/parser_test.go +++ b/reader/rss/parser_test.go @@ -537,6 +537,27 @@ func TestParseEntryWithFeedBurnerEnclosures(t *testing.T) { } } +func TestParseEntryWithRelativeURL(t *testing.T) { + data := `<?xml version="1.0" encoding="utf-8"?> + <rss version="2.0"> + <channel> + <link>https://example.org/</link> + <item> + <link>item.html</link> + </item> + </channel> + </rss>` + + feed, err := Parse(bytes.NewBufferString(data)) + if err != nil { + t.Error(err) + } + + if feed.Entries[0].Title != "https://example.org/item.html" { + t.Errorf("Incorrect entry title, got: %s", feed.Entries[0].Title) + } +} + func TestParseInvalidXml(t *testing.T) { data := `garbage` _, err := Parse(bytes.NewBufferString(data)) diff --git a/reader/rss/rss.go b/reader/rss/rss.go index b80692c..fcfccbd 100644 --- a/reader/rss/rss.go +++ b/reader/rss/rss.go @@ -15,6 +15,7 @@ import ( "github.com/miniflux/miniflux/helper" "github.com/miniflux/miniflux/model" "github.com/miniflux/miniflux/reader/date" + "github.com/miniflux/miniflux/url" ) type rssFeed struct { @@ -103,6 +104,15 @@ func (r *rssFeed) Transform() *model.Feed { if entry.URL == "" { entry.URL = feed.SiteURL + } else { + entryURL, err := url.AbsoluteURL(feed.SiteURL, entry.URL) + if err == nil { + entry.URL = entryURL + } + } + + if entry.Title == "" { + entry.Title = entry.URL } feed.Entries = append(feed.Entries, entry) @@ -213,11 +223,6 @@ func (r *rssItem) Transform() *model.Entry { entry.Content = r.GetContent() entry.Title = strings.TrimSpace(r.Title) entry.Enclosures = r.GetEnclosures() - - if entry.Title == "" { - entry.Title = entry.URL - } - return entry } |