Add support for date-only variant of ISO8601 timestamp format.
authorAndrej Kacian <ticho@claws-mail.org>
Fri, 3 Mar 2017 23:12:29 +0000 (00:12 +0100)
committerAndrej Kacian <ticho@claws-mail.org>
Fri, 3 Mar 2017 23:12:29 +0000 (00:12 +0100)
Fixes bug #3777 - Weird news dates for some RSS feeds

src/procheader.c

index 88d26db..efa3a7f 100644 (file)
@@ -947,8 +947,8 @@ static gint procheader_scan_date_string(const gchar *str,
 
        *zone = '\0';
 
-       /* RFC3339 subset */
-       /* This particular "subset" is invalid, RFC requires the time offset */
+       /* RFC3339 subset, no fraction of second, and no timezone offset */
+       /* This particular "subset" is invalid, RFC requires the offset */
        result = sscanf(str, "%4d-%2d-%2d %2d:%2d:%2d",
                        year, &month_n, day, hh, mm, ss);
        if (result == 6) {
@@ -958,6 +958,17 @@ static gint procheader_scan_date_string(const gchar *str,
                }
        }
 
+       /* ISO8601 format with just date (YYYY-MM-DD) */
+       result = sscanf(str, "%4d-%2d-%2d",
+                       year, &month_n, day);
+       if (result == 3) {
+               *hh = *mm = *ss = 0;
+               if (1 <= month_n && month_n <= 12) {
+                       strncpy2(month, monthstr+((month_n-1)*3), 4);
+                       return 0;
+               }
+       }
+
        return -1;
 }