aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/rss
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2017-12-13 20:16:15 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2017-12-13 20:16:15 -0800
commit827683ab59131ec38ed7cfa268bcaa6dc77d1412 (patch)
tree8461fa67142378b050fde4ee39d393e18ab71aaf /reader/rss
parent84d912c9794eaaef0f06638d9d23716f4e02b42f (diff)
Make sure that item URL are absolute
Diffstat (limited to 'reader/rss')
-rw-r--r--reader/rss/parser_test.go21
-rw-r--r--reader/rss/rss.go15
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
}