parse-time.el (parse-time-rules), time-date.el (date-to-time): Don't mishandle year...
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 3 Aug 2014 23:56:45 +0000 (23:56 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Sun, 3 Aug 2014 23:56:45 +0000 (23:56 +0000)
lisp/ChangeLog
lisp/parse-time.el
lisp/time-date.el

index b870994..333c3b6 100644 (file)
@@ -1,3 +1,11 @@
+2014-08-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don't mishandle year-9999 dates (Bug#18176).
+       * parse-time.el (parse-time-rules):
+       Allow years up to most-positive-fixnum.
+       * time-date.el (date-to-time):
+       Pass "Specified time is not representable" errors through.
+
 2014-07-31  Tassilo Horn  <tsdh@gnu.org>
 
        * gnus-msg.el (gnus-inews-insert-gcc): Allow `gcc-self' to be a list of
index 42b4991..85b8ef1 100644 (file)
   `(((6) parse-time-weekdays)
     ((3) (1 31))
     ((4) parse-time-months)
-    ((5) (100 4038))
+    ((5) (100 ,most-positive-fixnum))
     ((2 1 0)
      ,#'(lambda () (and (stringp parse-time-elt)
                        (= (length parse-time-elt) 8)
index b04cfcd..48fe229 100644 (file)
@@ -119,13 +119,20 @@ it is assumed that PICO was omitted and should be treated as zero."
 (defun date-to-time (date)
   "Parse a string DATE that represents a date-time and return a time value.
 If DATE lacks timezone information, GMT is assumed."
-  (condition-case ()
+  (condition-case err
       (apply 'encode-time (parse-time-string date))
-    (error (condition-case ()
-              (apply 'encode-time
-                     (parse-time-string
-                      (timezone-make-date-arpa-standard date)))
-            (error (error "Invalid date: %s" date))))))
+    (error
+     (let ((overflow-error '(error "Specified time is not representable")))
+       (if (equal err overflow-error)
+          (apply 'signal err)
+        (condition-case err
+            (apply 'encode-time
+                   (parse-time-string
+                    (timezone-make-date-arpa-standard date)))
+          (error
+           (if (equal err overflow-error)
+               (apply 'signal err)
+             (error "Invalid date: %s" date)))))))))
 
 ;; Bit of a mess.  Emacs has float-time since at least 21.1.
 ;; This file is synced to Gnus, and XEmacs packages may have been written