]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid crashes for invalid value of key modifiers
authorEli Zaretskii <eliz@gnu.org>
Mon, 29 Aug 2016 14:27:06 +0000 (17:27 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 29 Aug 2016 14:27:06 +0000 (17:27 +0300)
* 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
test/src/keymap-tests.el

index f27ca0f86e0bf02e4b7fa2742a3d894d20fc77d3..e44155260f8fc9a253ec40c4d420424926d12f52 100644 (file)
@@ -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))
     {
index b835fc7530b1c2af286ee274cd0aae1ed26d1dbf..26d3485870377d1a91a53cc8448846f553ee06b0 100644 (file)
@@ -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