]> granicus.if.org Git - curl/commitdiff
dates from 2038 or later now return 0x7fffffff when 32 bit time_t is used
authorDaniel Stenberg <daniel@haxx.se>
Thu, 11 Nov 2004 09:26:09 +0000 (09:26 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 11 Nov 2004 09:26:09 +0000 (09:26 +0000)
CHANGES
configure.ac
docs/libcurl/curl_getdate.3
lib/parsedate.c
lib/setup.h

diff --git a/CHANGES b/CHANGES
index d66143eb79e51e196037e69d29f4d048fd3d80f2..890f64b9e2e84ea804cbfca4f8a53a64265dcca9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,11 @@
 
                                   Changelog
 
+Daniel (11 November 2004)
+- Jeff Phillips found out that a date string with a year beyond 2038 could
+  crash the new date parser on systems with 32bit time_t. We now check for
+  this case and deal with it.
+
 Daniel (10 November 2004)
 - I installed Heimdal on my Debian box (using the debian package) and noticed
   that configure --with-gssapi failed to create a nice build. Fixed now.
index d8aaf023856889738cf4126ca61c962e9aa2a27b..78e80a5e7a29736705081c0e9489bf538265914f 100644 (file)
@@ -1171,6 +1171,7 @@ AC_CHECK_SIZEOF(curl_off_t, ,[
 ])
 AC_CHECK_SIZEOF(size_t)
 AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(time_t)
 
 AC_CHECK_TYPE(long long,
    [AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
index 65a0e738b93ff7423d377cf0fc7b5f7f3ae82414..9d13433a3443fb86fb223d92902f941912905412 100644 (file)
@@ -83,6 +83,9 @@ only ones RFC2616 says HTTP applications may use.
 .SH RETURN VALUE
 This function returns -1 when it fails to parse the date string. Otherwise it
 returns the number of seconds as described.
+
+If the year is larger than 2037 on systems with 32 bit time_t, this function
+will return 0x7fffffff (since that is the largest possible 31 bit number).
 .SH REWRITE
 The former version of this function was built with yacc and was not only very
 large, it was also never quite understood and it wasn't possible to build with
index 836340c07af4c5d3c2440227bc11475a78c378d8..e9e860fe6e3a40358bf549fd4183cdf22618abbe 100644 (file)
@@ -350,6 +350,12 @@ static time_t Curl_parsedate(const char *date)
     /* lacks vital info, fail */
     return -1;
 
+#if SIZEOF_TIME_T < 5
+  /* 32 bit time_t can only hold dates to the beginning of 2038 */
+  if(yearnum > 2037)
+    return 0x7fffffff;
+#endif
+
   tm.tm_sec = secnum;
   tm.tm_min = minnum;
   tm.tm_hour = hournum;
index e535279c817483aac87eb056ea8e2e9c1e02fb34..2969b936a5b5e20616844785ea90dea996d7dddb 100644 (file)
@@ -287,6 +287,11 @@ typedef int curl_socket_t;
 #define USE_LIBIDN
 #endif
 
+#ifndef SIZEOF_TIME_T
+/* assume default size of time_t to be 32 bit */
+#define SIZEOF_TIME_T 4
+#endif
+
 #define LIBIDN_REQUIRED_VERSION "0.4.1"
 
 #endif /* __CONFIG_H */