sfeed

Simple RSS and Atom feed parser
git clone https://git.sinitax.com/codemadness/sfeed
Log | Files | Refs | README | LICENSE | Upstream | sfeed.txt

commit 7086670e4335714e1df982bf1058082b7400b653
parent 82db1194f331d48515961e66893018db4f100569
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Sun, 11 Jul 2021 11:44:13 +0200

sfeed.c: parsetime: support short digit years for RSS pubDate fields (RFC822)

RSS (pubDate) uses RFC822 dates. This standard is obsoleted by RFC2822.

The RSS 2.0 spec says for the pubDate field:

"[...] All date-times in RSS conform to the Date and Time Specification of RFC
822, with the exception that the year may be expressed with two characters or
four characters (four preferred)."

RFC822 section 5.1 describes the syntax with 2 digit years:
https://datatracker.ietf.org/doc/html/rfc822#section-5.1

It was obsoleted/fixed in RFC2822 section 4.3:
https://datatracker.ietf.org/doc/html/rfc2822#section-4.3
"  Where a two or three digit year occurs in a date, the year is to be
   interpreted as follows: If a two digit year is encountered whose
   value is between 00 and 49, the year is interpreted by adding 2000,
   ending up with a value between 2000 and 2049.  If a two digit year is
   encountered with a value between 50 and 99, or any three digit year
   is encountered, the year is interpreted by adding 1900."

In the real world I've seen all sites using RSS use the 4-digit format.

For historic context of changes and what feeds it might affect:

- RFC822 was published in 13 august 1982, obsoleted by RFC2822.
- RFC2822 was published in april 2001, obsoleted by RFC5322.
- RFC5322 was published in october 2008.
- RDF was started around 1996. It was published around 2004.
- March 15, 1999: RSS 0.90 (Netscape), published by Netscape and authored by
  Ramanathan Guha.
- July 10, 1999: RSS 0.91 (Netscape), published by Netscape and authored by Dan
  Libby.
- June 9, 2000: RSS 0.91 (UserLand), published by UserLand Software and
  authored by Dave Winer.
- Dec. 25, 2000: RSS 0.92, UserLand.
- Aug. 19, 2002: RSS 2.0, UserLand.
- July 15, 2003: RSS 2.0 (version 2.0.1), published by the Berkman Center for
  Internet & Society at Harvard Law School and authored by Dave Winer.
- July 15, 2003: RSS 2.0 (version 2.0.1-rv-1), published by the RSS Advisory
  Board.
- July 17, 2003: RSS 2.0 (version 2.0.1-rv-2), RSS Advisory Board.
- April 6, 2004: RSS 2.0 (version 2.0.1-rv-3), RSS Advisory Board.
- May 31, 2004: RSS 2.0 (version 2.0.1-rv-4), RSS Advisory Board.
- June 19, 2004: RSS 2.0 (version 2.0.1-rv-5), RSS Advisory Board.
- January 25, 2005: RSS 2.0 (version 2.0.1-rv-6), RSS Advisory Board.
- Aug. 12, 2006: RSS 2.0 (version 2.0.8), RSS Advisory Board.
- June 5, 2007: RSS 2.0 (version 2.0.9), RSS Advisory Board.
- Oct. 15, 2007: RSS 2.0 (version 2.0.10), RSS Advisory Board.
- March 30, 2009 (current): RSS 2.0 (version 2.0.11), RSS Advisory Board.

RSS history source: https://www.rssboard.org/rss-history

Diffstat:
Msfeed.c | 3+++
1 file changed, 3 insertions(+), 0 deletions(-)

diff --git a/sfeed.c b/sfeed.c @@ -611,6 +611,9 @@ parsetime(const char *s, time_t *tp) ; for (v = 0, i = 0; i < 4 && isdigit((unsigned char)*s); s++, i++) v = (v * 10) + (*s - '0'); + /* obsolete short year: RFC2822 4.3 */ + if (i <= 3) + v += (v >= 0 && v <= 49) ? 2000 : 1900; va[0] = v; /* year */ for (; isspace((unsigned char)*s); s++) ;