From 472ebd86277d26e6a7194e0e66fc171439fd8f44 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Aug 2016 17:27:06 +0300 Subject: [PATCH] Avoid crashes for invalid value of key modifiers * src/keyboard.c (parse_solitary_modifier): If the argument SYMBOL is not a symbol, don't try to recognize it. See http://lists.gnu.org/archive/html/emacs-devel/2016-08/msg00502.html for the details. * test/src/keymap-tests.el (keymap-where-is-internal-test): New test, for testing the above fix. --- src/keyboard.c | 7 ++++++- test/src/keymap-tests.el | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/keyboard.c b/src/keyboard.c index f27ca0f86e0..e44155260f8 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -6621,7 +6621,12 @@ has the same base event type and all the specified modifiers. */) int parse_solitary_modifier (Lisp_Object symbol) { - Lisp_Object name = SYMBOL_NAME (symbol); + Lisp_Object name; + + if (!SYMBOLP (symbol)) + return 0; + + name = SYMBOL_NAME (symbol); switch (SREF (name, 0)) { diff --git a/test/src/keymap-tests.el b/test/src/keymap-tests.el index b835fc7530b..26d34858703 100644 --- a/test/src/keymap-tests.el +++ b/test/src/keymap-tests.el @@ -38,6 +38,13 @@ commit 86c19714b097aa477d339ed99ffb5136c755a046." (should (eq (lookup-key Buffer-menu-mode-map [32]) 'undefined))) (define-key Buffer-menu-mode-map [32] def)))) +(ert-deftest keymap-where-is-internal-test () + "Make sure we don't crash when `where-is-preferred-modifier' is not a symbol." + (should + (equal (let ((where-is-preferred-modifier "alt")) + (where-is-internal 'execute-extended-command global-map t)) + [#x8000078]))) + (provide 'keymap-tests) ;;; keymap-tests.el ends here -- 2.11.4.GIT