aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2023-04-16 08:51:22 +0300
committerEli Zaretskii2023-04-16 08:51:22 +0300
commit39035fbfc5f6dfa66c9ba14f61a8d1c751d847c0 (patch)
tree961942c52356579952223eae73c8188f20308220 /src
parentb7023da6627f911c087961d9d476b3eafabb7ae7 (diff)
downloademacs-39035fbfc5f6dfa66c9ba14f61a8d1c751d847c0.tar.gz
emacs-39035fbfc5f6dfa66c9ba14f61a8d1c751d847c0.zip
Avoid crashes in 'describe-keymap' due to shadowing
* src/keymap.c (describe_vector): Handle shadowing by something other than a symbol. (Bug#62867)
Diffstat (limited to 'src')
-rw-r--r--src/keymap.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/keymap.c b/src/keymap.c
index efac410d317..7f5777c9251 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -3308,13 +3308,18 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args,
3308 if (this_shadowed) 3308 if (this_shadowed)
3309 { 3309 {
3310 SET_PT (PT - 1); 3310 SET_PT (PT - 1);
3311 static char const fmt[] = " (currently shadowed by `%s')"; 3311 if (SYMBOLP (shadowed_by))
3312 USE_SAFE_ALLOCA; 3312 {
3313 char *buffer = SAFE_ALLOCA (sizeof fmt + 3313 static char const fmt[] = " (currently shadowed by `%s')";
3314 SBYTES (SYMBOL_NAME (shadowed_by))); 3314 USE_SAFE_ALLOCA;
3315 esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by))); 3315 char *buffer =
3316 insert_string (buffer); 3316 SAFE_ALLOCA (sizeof fmt + SBYTES (SYMBOL_NAME (shadowed_by)));
3317 SAFE_FREE(); 3317 esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by)));
3318 insert_string (buffer);
3319 SAFE_FREE();
3320 }
3321 else /* Could be a keymap, a lambda, or a keyboard macro. */
3322 insert_string (" (currently shadowed)");
3318 SET_PT (PT + 1); 3323 SET_PT (PT + 1);
3319 } 3324 }
3320 } 3325 }