aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Stephani2016-10-12 22:48:32 +0200
committerPhilipp Stephani2016-10-13 13:00:48 +0200
commit8ee95221c7112a763ae6ce41c7c58b3c32ece5fc (patch)
tree780fef85d03762e91361b962c1da769a821f4edd
parentb0f1d23ec482aa71a0ae0251f6f44f4b8d261259 (diff)
downloademacs-8ee95221c7112a763ae6ce41c7c58b3c32ece5fc.tar.gz
emacs-8ee95221c7112a763ae6ce41c7c58b3c32ece5fc.zip
Fix crash in evaluating functions
See Bug#24673 * src/eval.c (funcall_lambda): Fix crash for bogus functions such as (closure). * test/src/eval-tests.el (eval-tests--bug24673): Add test.
-rw-r--r--src/eval.c6
-rw-r--r--test/src/eval-tests.el35
2 files changed, 39 insertions, 2 deletions
diff --git a/src/eval.c b/src/eval.c
index 2fedbf377cf..a9bad2491fa 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2841,9 +2841,11 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
2841 { 2841 {
2842 if (EQ (XCAR (fun), Qclosure)) 2842 if (EQ (XCAR (fun), Qclosure))
2843 { 2843 {
2844 fun = XCDR (fun); /* Drop `closure'. */ 2844 Lisp_Object cdr = XCDR (fun); /* Drop `closure'. */
2845 if (! CONSP (cdr))
2846 xsignal1 (Qinvalid_function, fun);
2847 fun = cdr;
2845 lexenv = XCAR (fun); 2848 lexenv = XCAR (fun);
2846 CHECK_LIST_CONS (fun, fun);
2847 } 2849 }
2848 else 2850 else
2849 lexenv = Qnil; 2851 lexenv = Qnil;
diff --git a/test/src/eval-tests.el b/test/src/eval-tests.el
new file mode 100644
index 00000000000..75999e1a25a
--- /dev/null
+++ b/test/src/eval-tests.el
@@ -0,0 +1,35 @@
1;;; eval-tests.el --- unit tests for src/eval.c -*- lexical-binding: t; -*-
2
3;; Copyright (C) 2016 Free Software Foundation, Inc.
4
5;; Author: Philipp Stephani <phst@google.com>
6
7;; This file is part of GNU Emacs.
8
9;; GNU Emacs is free software: you can redistribute it and/or modify
10;; it under the terms of the GNU General Public License as published by
11;; the Free Software Foundation, either version 3 of the License, or
12;; (at your option) any later version.
13
14;; GNU Emacs is distributed in the hope that it will be useful,
15;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;; GNU General Public License for more details.
18
19;; You should have received a copy of the GNU General Public License
20;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22;;; Commentary:
23
24;; Unit tests for src/eval.c.
25
26;;; Code:
27
28(require 'ert)
29
30(ert-deftest eval-tests--bug24673 ()
31 "Checks that Bug#24673 has been fixed."
32 ;; This should not crash.
33 (should-error (funcall '(closure)) :type 'invalid-function))
34
35;;; eval-tests.el ends here