1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-28 01:00:52 -07:00

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.
This commit is contained in:
Philipp Stephani 2016-10-12 22:48:32 +02:00
parent b0f1d23ec4
commit 8ee95221c7
2 changed files with 39 additions and 2 deletions

View file

@ -2841,9 +2841,11 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
{
if (EQ (XCAR (fun), Qclosure))
{
fun = XCDR (fun); /* Drop `closure'. */
Lisp_Object cdr = XCDR (fun); /* Drop `closure'. */
if (! CONSP (cdr))
xsignal1 (Qinvalid_function, fun);
fun = cdr;
lexenv = XCAR (fun);
CHECK_LIST_CONS (fun, fun);
}
else
lexenv = Qnil;

35
test/src/eval-tests.el Normal file
View file

@ -0,0 +1,35 @@
;;; eval-tests.el --- unit tests for src/eval.c -*- lexical-binding: t; -*-
;; Copyright (C) 2016 Free Software Foundation, Inc.
;; Author: Philipp Stephani <phst@google.com>
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; Unit tests for src/eval.c.
;;; Code:
(require 'ert)
(ert-deftest eval-tests--bug24673 ()
"Checks that Bug#24673 has been fixed."
;; This should not crash.
(should-error (funcall '(closure)) :type 'invalid-function))
;;; eval-tests.el ends here