commit 5f9e6325936e158cd3c8afcbd5005b278dc9a855 from: Matthew Streatfield via: GitHub date: Fri Apr 18 00:26:40 2025 UTC Merge pull request #8 from ollytom/main rss: handle valid empty fields commit - c4a56c0a8e7accfd981a9b7b19515d5f3302c278 commit + 5f9e6325936e158cd3c8afcbd5005b278dc9a855 blob - 912e003542d1aca5a7f6acaf7e070ea812418ed8 blob + 4764ad87ee5f6482c61abe96e62f5e5ccb9c5bd7 --- rss/rss.go +++ rss/rss.go @@ -42,17 +42,22 @@ func (ch *Channel) UnmarshalXML(d *xml.Decoder, start if err := d.DecodeElement(aux, &start); err != nil { return err } - t, err := time.Parse(time.RFC1123Z, aux.PubDate) - if err != nil { - return err - } - ch.PubDate = t - t, err = time.Parse(time.RFC1123Z, aux.LastBuildDate) - if err != nil { - return err + if aux.PubDate != "" { + t, err := time.Parse(time.RFC1123Z, aux.PubDate) + if err != nil { + return err + } + ch.PubDate = t } - ch.LastBuildDate = t + if aux.LastBuildDate != "" { + t, err := time.Parse(time.RFC1123Z, aux.LastBuildDate) + if err != nil { + return err + } + ch.LastBuildDate = t + } + return nil } @@ -92,11 +97,13 @@ func (it *Item) UnmarshalXML(d *xml.Decoder, start xml if err := d.DecodeElement(aux, &start); err != nil { return err } - t, err := time.Parse(time.RFC1123Z, aux.PubDate) - if err != nil { - return err + if aux.PubDate != "" { + t, err := time.Parse(time.RFC1123Z, aux.PubDate) + if err != nil { + return err + } + it.PubDate = t } - it.PubDate = t return nil } blob - 29868590b90b48eeb4158681a5840cb26c12e1ff blob + f2cf2b7c74ea4e2ea0fe2d68bcaa70f6e51dfa26 --- rss/rss_test.go +++ rss/rss_test.go @@ -50,3 +50,14 @@ func TestDecode(t *testing.T) { t.Errorf("Entry.Link: expected %q, got %q", "https://risky.biz/RBNEWS410/", item.Link) } } + +func TestEmpty(t *testing.T) { + f, err := os.Open("testdata/empty.xml") + if err != nil { + t.Fatal(err) + } + defer f.Close() + if _, err := Decode(f); err != nil { + t.Fatal(err) + } +} blob - /dev/null blob + d1159eb153cd0c69b6e676c245e08d80345aff1c (mode 644) --- /dev/null +++ rss/testdata/empty.xml @@ -0,0 +1,10 @@ + + + + proto:// + + + + + +