Fix time-add/time-sub validity checking
* 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.
This commit is contained in:
parent
50dc4ca8d0
commit
2197ea89bf
2 changed files with 7 additions and 3 deletions
|
@ -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. */
|
||||
|
|
|
@ -136,6 +136,10 @@
|
|||
(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)))))
|
||||
|
|
Loading…
Add table
Reference in a new issue