Commit Diff


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 @@
+<rss version="2.0">
+	<channel>
+		<title></title>
+		<link>proto://</link>
+		<description></description>
+		<item>
+			<title></title>
+		</item>
+	</channel>
+</rss>