]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix time-add/time-sub validity checking
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 20 Aug 2019 01:02:59 +0000 (18:02 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 20 Aug 2019 01:05:15 +0000 (18:05 -0700)
* src/timefns.c (time_arith): Check the first arg for
validity even if the second arg is not finite.
* test/src/timefns-tests.el (time-arith-tests): Test this.

src/timefns.c
test/src/timefns-tests.el

index 3948f8733542f7d3a96b282819de4c59c7970bc8..2d545a4f905cf10dd65dca4fba70831acf788c5e 100644 (file)
@@ -1035,12 +1035,12 @@ time_arith (Lisp_Object a, Lisp_Object b, bool subtract)
       double db = XFLOAT_DATA (Ffloat_time (b));
       return make_float (subtract ? da - db : da + db);
     }
-  if (FLOATP (b) && !isfinite (XFLOAT_DATA (b)))
-    return subtract ? make_float (-XFLOAT_DATA (b)) : b;
-
   enum timeform aform, bform;
   struct lisp_time ta = lisp_time_struct (a, &aform);
 
+  if (FLOATP (b) && !isfinite (XFLOAT_DATA (b)))
+    return subtract ? make_float (-XFLOAT_DATA (b)) : b;
+
   /* Subtract nil from nil correctly, and handle other eq values
      quicker while we're at it.  Compare here rather than earlier, to
      handle NaNs and check formats.  */
index 13ab7d83c3ef59d416301738bbf9012794743cd1..a30b2de3a5bccc94a3db218ccc07c65f16133493 100644 (file)
                           (cons (1+ most-positive-fixnum) 1000000000000)
                           (cons 1000000000000 (1+ most-positive-fixnum)))))
     (dolist (a time-values)
+      (should-error (time-add a 'ouch))
+      (should-error (time-add 'ouch a))
+      (should-error (time-subtract a 'ouch))
+      (should-error (time-subtract 'ouch a))
       (dolist (b time-values)
        (let ((aa (time-subtract (time-add a b) b)))
          (should (or (time-equal-p a aa) (and (floatp aa) (isnan aa)))))