diff options
author | Alessandro Ghedini <al3xbio@gmail.com> | 2012-03-22 20:15:42 +0100 |
---|---|---|
committer | Alessandro Ghedini <al3xbio@gmail.com> | 2012-03-22 20:15:42 +0100 |
commit | c1521024d33ba639a8d66385e30355ebbdff4705 (patch) | |
tree | b178b1e38d39136e8db9ef5c528981cf1d97ff8c /lib/parsedate.c | |
parent | 048114422c503da411ebc440ce68eaf92e2c5f19 (diff) |
Imported Upstream version 7.25.0
Diffstat (limited to 'lib/parsedate.c')
-rw-r--r-- | lib/parsedate.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/parsedate.c b/lib/parsedate.c index ec60e78e..b6079bc8 100644 --- a/lib/parsedate.c +++ b/lib/parsedate.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -75,6 +75,10 @@ #include "setup.h" +#ifdef HAVE_LIMITS_H +#include <limits.h> +#endif + #include <curl/curl.h> #include "rawstr.h" #include "warnless.h" @@ -392,7 +396,24 @@ static int parsedate(const char *date, time_t *output) secnum = 0; } else { - val = curlx_sltosi(strtol(date, &end, 10)); + long lval; + int error; + int old_errno; + + old_errno = ERRNO; + SET_ERRNO(0); + lval = strtol(date, &end, 10); + error = ERRNO; + if(error != old_errno) + SET_ERRNO(old_errno); + + if(error) + return PARSEDATE_FAIL; + + if((lval > (long)INT_MAX) || (lval < (long)INT_MIN)) + return PARSEDATE_FAIL; + + val = curlx_sltosi(lval); if((tzoff == -1) && ((end - date) == 4) && |