* bug#62867: segfault in describe_vector @ 2023-04-15 12:07 Xinyang Chen 2023-04-15 19:33 ` Eli Zaretskii 0 siblings, 1 reply; 4+ messages in thread From: Xinyang Chen @ 2023-04-15 12:07 UTC (permalink / raw) To: 62867 [-- Attachment #1: Type: text/plain, Size: 373 bytes --] to reproduce: (package-initialize) (require 'evil) (setq testmap (make-sparse-keymap)) (define-key testmap (kbd "SPC") #'test) (evil-define-key 'motion global-map (kbd "SPC") testmap) (evil-mode) (describe-keymap global-map) This appears to be caused by keymap.c line 3313 SYMBOL_NAME (shadowed_by) where shadowed_by don't have to be a symbol (In this case its a keymap) [-- Attachment #2: Type: text/html, Size: 551 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#62867: segfault in describe_vector 2023-04-15 12:07 bug#62867: segfault in describe_vector Xinyang Chen @ 2023-04-15 19:33 ` Eli Zaretskii 2023-04-15 22:16 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 4+ messages in thread From: Eli Zaretskii @ 2023-04-15 19:33 UTC (permalink / raw) To: Xinyang Chen, Stefan Monnier; +Cc: 62867 > From: Xinyang Chen <chenxy@mit.edu> > Date: Sat, 15 Apr 2023 08:07:07 -0400 > > to reproduce: > > (package-initialize) > (require 'evil) > (setq testmap (make-sparse-keymap)) > (define-key testmap (kbd "SPC") #'test) > (evil-define-key 'motion global-map (kbd "SPC") testmap) > (evil-mode) > (describe-keymap global-map) > > This appears to be caused by keymap.c line 3313 > SYMBOL_NAME (shadowed_by) > where shadowed_by don't have to be a symbol (In this case its a keymap) No good deed goes unpunished... Stefan, can we do better than the below? diff --git a/src/keymap.c b/src/keymap.c index efac410..b9950b9 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -3308,13 +3308,18 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, if (this_shadowed) { SET_PT (PT - 1); - static char const fmt[] = " (currently shadowed by `%s')"; - USE_SAFE_ALLOCA; - char *buffer = SAFE_ALLOCA (sizeof fmt + - SBYTES (SYMBOL_NAME (shadowed_by))); - esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by))); - insert_string (buffer); - SAFE_FREE(); + if (SYMBOLP (shadowed_by)) + { + static char const fmt[] = " (currently shadowed by `%s')"; + USE_SAFE_ALLOCA; + char *buffer = + SAFE_ALLOCA (sizeof fmt + SBYTES (SYMBOL_NAME (shadowed_by))); + esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by))); + insert_string (buffer); + SAFE_FREE(); + } + else + insert_string (" (binding currently shadowed by a keymap)"); SET_PT (PT + 1); } } ^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#62867: segfault in describe_vector 2023-04-15 19:33 ` Eli Zaretskii @ 2023-04-15 22:16 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-04-16 5:53 ` Eli Zaretskii 0 siblings, 1 reply; 4+ messages in thread From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-04-15 22:16 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 62867, Xinyang Chen > Stefan, can we do better than the below? The patch looks about right to me. Only detail is that `shadowed_by` contains a binding, so it can be a keymap, but it can also be a lambda expression, or a keyboard macro, so we shouldn't say "shadowed by a keymap" but just "shadowed" (unless we go through the extra trouble of checking if it's a keymap, or if it's a ...). Stefan > diff --git a/src/keymap.c b/src/keymap.c > index efac410..b9950b9 100644 > --- a/src/keymap.c > +++ b/src/keymap.c > @@ -3308,13 +3308,18 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, > if (this_shadowed) > { > SET_PT (PT - 1); > - static char const fmt[] = " (currently shadowed by `%s')"; > - USE_SAFE_ALLOCA; > - char *buffer = SAFE_ALLOCA (sizeof fmt + > - SBYTES (SYMBOL_NAME (shadowed_by))); > - esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by))); > - insert_string (buffer); > - SAFE_FREE(); > + if (SYMBOLP (shadowed_by)) > + { > + static char const fmt[] = " (currently shadowed by `%s')"; > + USE_SAFE_ALLOCA; > + char *buffer = > + SAFE_ALLOCA (sizeof fmt + SBYTES (SYMBOL_NAME (shadowed_by))); > + esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by))); > + insert_string (buffer); > + SAFE_FREE(); > + } > + else > + insert_string (" (binding currently shadowed by a keymap)"); > SET_PT (PT + 1); > } > } ^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#62867: segfault in describe_vector 2023-04-15 22:16 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-04-16 5:53 ` Eli Zaretskii 0 siblings, 0 replies; 4+ messages in thread From: Eli Zaretskii @ 2023-04-16 5:53 UTC (permalink / raw) To: Stefan Monnier; +Cc: 62867-done, chenxy > From: Stefan Monnier <monnier@iro.umontreal.ca> > Cc: Xinyang Chen <chenxy@mit.edu>, 62867@debbugs.gnu.org > Date: Sat, 15 Apr 2023 18:16:32 -0400 > > > Stefan, can we do better than the below? > > The patch looks about right to me. > > Only detail is that `shadowed_by` contains a binding, so it can be > a keymap, but it can also be a lambda expression, or a keyboard macro, > so we shouldn't say "shadowed by a keymap" but just "shadowed" (unless > we go through the extra trouble of checking if it's a keymap, or if it's > a ...). Thanks, installed on the emacs-29 branch with that change, and closing the bug. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-04-16 5:53 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-04-15 12:07 bug#62867: segfault in describe_vector Xinyang Chen 2023-04-15 19:33 ` Eli Zaretskii 2023-04-15 22:16 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-04-16 5:53 ` Eli Zaretskii
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.