diff options
| author | Philipp Stephani | 2016-10-12 22:48:32 +0200 |
|---|---|---|
| committer | Philipp Stephani | 2016-10-13 13:00:48 +0200 |
| commit | 8ee95221c7112a763ae6ce41c7c58b3c32ece5fc (patch) | |
| tree | 780fef85d03762e91361b962c1da769a821f4edd /src/eval.c | |
| parent | b0f1d23ec482aa71a0ae0251f6f44f4b8d261259 (diff) | |
| download | emacs-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.
Diffstat (limited to 'src/eval.c')
| -rw-r--r-- | src/eval.c | 6 |
1 files changed, 4 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; |