From bf632fad2e19e9ece4db5957f05727f373541917 Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sat, 4 Jan 2020 15:18:24 -0800 Subject: Allow only absolute URLs in comments URL Some feeds are using invalid URLs (random text). --- reader/atom/atom_10.go | 11 ++++++++++- reader/atom/atom_10_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) (limited to 'reader/atom') diff --git a/reader/atom/atom_10.go b/reader/atom/atom_10.go index 099cbed..708cc9f 100644 --- a/reader/atom/atom_10.go +++ b/reader/atom/atom_10.go @@ -84,7 +84,7 @@ func (a *atom10Entry) Transform() *model.Entry { entry.Content = a.entryContent() entry.Title = a.entryTitle() entry.Enclosures = a.entryEnclosures() - entry.CommentsURL = a.Links.firstLinkWithRelationAndType("replies", "text/html") + entry.CommentsURL = a.entryCommentsURL() return entry } @@ -194,6 +194,15 @@ func (a *atom10Entry) entryEnclosures() model.EnclosureList { return enclosures } +// See https://tools.ietf.org/html/rfc4685#section-3 +func (a *atom10Entry) entryCommentsURL() string { + commentsURL := a.Links.firstLinkWithRelationAndType("replies", "text/html") + if url.IsAbsoluteURL(commentsURL) { + return commentsURL + } + return "" +} + type atom10Text struct { Type string `xml:"type,attr"` Data string `xml:",chardata"` diff --git a/reader/atom/atom_10_test.go b/reader/atom/atom_10_test.go index 63127c4..d614691 100644 --- a/reader/atom/atom_10_test.go +++ b/reader/atom/atom_10_test.go @@ -777,3 +777,43 @@ func TestParseRepliesLinkRelation(t *testing.T) { t.Errorf("Incorrect entry comments URL, got: %s", feed.Entries[0].CommentsURL) } } + +func TestAbsoluteCommentsURL(t *testing.T) { + data := ` + + http://www.example.org/myfeed + My Example Feed + 2005-07-28T12:00:00Z + + James + + tag:entries.com,2005:1 + My original entry + 2006-03-01T12:12:12Z + + + This is my original entry + + ` + + feed, err := Parse(bytes.NewBufferString(data)) + if err != nil { + t.Fatal(err) + } + + if len(feed.Entries) != 1 { + t.Errorf("Incorrect number of entries, got: %d", len(feed.Entries)) + } + + if feed.Entries[0].URL != "http://www.example.org/entries/1" { + t.Errorf("Incorrect entry URL, got: %s", feed.Entries[0].URL) + } + + if feed.Entries[0].CommentsURL != "" { + t.Errorf("Incorrect entry comments URL, got: %s", feed.Entries[0].CommentsURL) + } +} -- cgit v1.2.3