From 4d58f97f604bfef5b2cb7538f9bbc925c141622f Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 27 Sep 2010 16:54:02 +0200 Subject: [PATCH] parsedate: allow time specified without seconds The date format in RFC822 allows that the seconds part of HH:MM:SS is left out, but this function didn't allow it. This change also includes a modified test case that makes sure that this now works. Reported by: Matt Ford Bug: http://curl.haxx.se/bug/view.cgi?id=3076529 --- lib/parsedate.c | 6 ++++++ tests/data/test517 | 1 + tests/libtest/lib517.c | 2 ++ 3 files changed, 9 insertions(+) diff --git a/lib/parsedate.c b/lib/parsedate.c index 26f7d84ce..5d8af2692 100644 --- a/lib/parsedate.c +++ b/lib/parsedate.c @@ -371,6 +371,12 @@ int Curl_parsedate(const char *date, time_t *output) /* time stamp! */ date += 8; } + else if((secnum == -1) && + (2 == sscanf(date, "%02d:%02d", &hournum, &minnum))) { + /* time stamp without seconds */ + date += 5; + secnum = 0; + } else { val = (int)strtol(date, &end, 10); diff --git a/tests/data/test517 b/tests/data/test517 index 04aa6a089..d7b91842c 100644 --- a/tests/data/test517 +++ b/tests/data/test517 @@ -103,6 +103,7 @@ nothing 74: Thu, 999999999999-Aug-2007 20:49:07 GMT => -1 75: Thu, 12-Aug-2007 20:61:99999999999 GMT => -1 76: IAintNoDateFool => -1 +77: Thu Apr 18 22:50 2007 GMT => 1176936600 # This test case previously testes an overflow case ("2094 Nov 6 => diff --git a/tests/libtest/lib517.c b/tests/libtest/lib517.c index 3f7b064ab..38a65d30b 100644 --- a/tests/libtest/lib517.c +++ b/tests/libtest/lib517.c @@ -97,6 +97,8 @@ static const char *dates[]={ "Thu, 999999999999-Aug-2007 20:49:07 GMT", "Thu, 12-Aug-2007 20:61:99999999999 GMT", "IAintNoDateFool", + "Thu Apr 18 22:50 2007 GMT", /* without seconds */ + NULL };