From c2b8ce4439935e2e158d4357d234135a251c5767 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Fri, 27 Mar 2020 18:11:18 +0100 Subject: [PATCH] Calc: don't treat nil as an integer (bug#40155) Make Math-num-integerp return false for nil, following Math-integerp which was changed in the bignum reform. This fixes a crash in calc-graph-fast. Reported by Narendra Joshi. * lisp/calc/calc-macs.el (Math-num-integerp): Not true for nil. * test/lisp/calc/calc-tests.el (calc-Math-integerp): New tests. --- lisp/calc/calc-macs.el | 5 +++-- test/lisp/calc/calc-tests.el | 11 +++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lisp/calc/calc-macs.el b/lisp/calc/calc-macs.el index e73d108e6d9..257d369b87a 100644 --- a/lisp/calc/calc-macs.el +++ b/lisp/calc/calc-macs.el @@ -161,8 +161,9 @@ hms date mod var)))) (defsubst Math-num-integerp (a) - (or (not (consp a)) - (and (eq (car a) 'float) + (or (integerp a) + (and (consp a) + (eq (car a) 'float) (>= (nth 2 a) 0)))) (defsubst Math-equal-int (a b) diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el index 784b404898a..8fffb7c14b5 100644 --- a/test/lisp/calc/calc-tests.el +++ b/test/lisp/calc/calc-tests.el @@ -334,6 +334,17 @@ An existing calc stack is reused, otherwise a new one is created." (should (equal tos '(- (* 2 (var x var-x)) 4))) (should (equal trail "pdiv 2 * x - 4\nprem 8 * x + 1\n")))))) +(ert-deftest calc-Math-integerp () + (should (Math-integerp -7)) + (should (Math-integerp (ash 1 65))) + (should-not (Math-integerp '(float 1 0))) + (should-not (Math-integerp nil)) + + (should (Math-num-integerp -7)) + (should (Math-num-integerp (ash 1 65))) + (should (Math-num-integerp '(float 1 0))) + (should-not (Math-integerp nil))) + (provide 'calc-tests) ;;; calc-tests.el ends here -- 2.39.2