diff options
| author | Eli Zaretskii | 2023-04-16 08:51:22 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2023-04-16 08:51:22 +0300 |
| commit | 39035fbfc5f6dfa66c9ba14f61a8d1c751d847c0 (patch) | |
| tree | 961942c52356579952223eae73c8188f20308220 /src | |
| parent | b7023da6627f911c087961d9d476b3eafabb7ae7 (diff) | |
| download | emacs-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.c | 19 |
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 | } |