* bug#15907: 24.3; Emacs crash due to substitute-command-keys and after-change-functions
@ 2013-11-15 21:23 Artur Malabarba
2013-11-16 9:31 ` Eli Zaretskii
0 siblings, 1 reply; 4+ messages in thread
From: Artur Malabarba @ 2013-11-15 21:23 UTC (permalink / raw)
To: 15907
Emacs crashes whenever `substitute-command-keys' is invoked and one of
the functions in `after-change-functions' contains a call similar to
`(format "%s" 1)'.
To reproduce:
1. Start `emacs -Q';
2. Evaluate the following two statements:
(add-hook 'after-change-functions (lambda (&rest a) (format "%s" 1)))
(substitute-command-keys "\\{emacs-lisp-mode-map}")
3. That's it. Emacs crashes.
The crash doesn't happen if you replace the number 1 with a string or
a symbol, but it does also happen if you replace it with a list.
This is most annoying as it causes a crash whenever `describe-mode' is
invoked.
In GNU Emacs 24.3.1 (i686-pc-linux-gnu, GTK+ Version 3.8.2)
of 2013-08-06 on -mnt-storage-buildroots-staging-i686-eric
Windowing system distributor `The X.Org Foundation', version 11.0.11403000
Configured using:
`configure '--prefix=/usr' '--sysconfdir=/etc'
'--libexecdir=/usr/lib' '--localstatedir=/var'
'--with-x-toolkit=gtk3' '--with-xft' 'CFLAGS=-march=i686
-mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4'
'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro'
'CPPFLAGS=-D_FORTIFY_SOURCE=2''
Important settings:
value of $LANG: en_GB.UTF-8
locale-coding-system: utf-8-unix
default enable-multibyte-characters: t
Major mode: Summary
Minor modes in effect:
jabber-activity-mode: t
global-diff-hl-mode: t
diff-auto-refine-mode: t
global-undo-tree-mode: t
undo-tree-mode: t
show-paren-mode: t
savehist-mode: t
electric-indent-mode: t
global-auto-complete-mode: t
google-this-mode: t
erc-list-mode: t
erc-menu-mode: t
erc-autojoin-mode: t
erc-ring-mode: t
erc-networks-mode: t
erc-pcomplete-mode: t
erc-track-mode: t
erc-track-minor-mode: t
erc-match-mode: t
erc-button-mode: t
erc-fill-mode: t
erc-stamp-mode: t
erc-netsplit-mode: t
erc-irccontrols-mode: t
erc-noncommands-mode: t
erc-move-to-prompt-mode: t
erc-readonly-mode: t
yas-global-mode: t
tooltip-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
buffer-read-only: t
transient-mark-mode: t
abbrev-mode: t
Recent input:
C-h m C-x C-o C-x C-k q q q C-h m <down-mouse-1> <mouse-1>
C-x C-k C-x C-e C-1 s m a <tab> M-- C-1 C-= s m a <tab>
<return> C-x C-o P P q C-ç M-x r e p o <tab> C-g <f12>
M-x r e p o r <tab> m <tab> <backspace> b <tab> <r
eturn>
Artur Malabarba
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#15907: 24.3; Emacs crash due to substitute-command-keys and after-change-functions
2013-11-15 21:23 bug#15907: 24.3; Emacs crash due to substitute-command-keys and after-change-functions Artur Malabarba
@ 2013-11-16 9:31 ` Eli Zaretskii
2013-11-16 10:29 ` Eli Zaretskii
[not found] ` <CAAdUY-KGJ++9D8uY8dK-R0_FPw1=XfHgQZkf+WuT2SwwVYGo7A@mail.gmail.com>
0 siblings, 2 replies; 4+ messages in thread
From: Eli Zaretskii @ 2013-11-16 9:31 UTC (permalink / raw)
To: Artur Malabarba; +Cc: 15907
> Date: Fri, 15 Nov 2013 21:23:01 +0000 (GMT)
> From: Artur Malabarba <bruce.connor.am@gmail.com>
>
> Emacs crashes whenever `substitute-command-keys' is invoked and one of
> the functions in `after-change-functions' contains a call similar to
> `(format "%s" 1)'.
>
> To reproduce:
>
> 1. Start `emacs -Q';
> 2. Evaluate the following two statements:
> (add-hook 'after-change-functions (lambda (&rest a) (format "%s" 1)))
> (substitute-command-keys "\\{emacs-lisp-mode-map}")
> 3. That's it. Emacs crashes.
>
> The crash doesn't happen if you replace the number 1 with a string or
> a symbol, but it does also happen if you replace it with a list.
It no longer crashes after changes in trunk revision 115119.
> This is most annoying as it causes a crash whenever `describe-mode' is
> invoked.
Since you didn't show any real-life use cases, I'm not sure that the
result is what you wanted, please do check.
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#15907: 24.3; Emacs crash due to substitute-command-keys and after-change-functions
2013-11-16 9:31 ` Eli Zaretskii
@ 2013-11-16 10:29 ` Eli Zaretskii
[not found] ` <CAAdUY-KGJ++9D8uY8dK-R0_FPw1=XfHgQZkf+WuT2SwwVYGo7A@mail.gmail.com>
1 sibling, 0 replies; 4+ messages in thread
From: Eli Zaretskii @ 2013-11-16 10:29 UTC (permalink / raw)
To: bruce.connor.am; +Cc: 15907-done
> Date: Sat, 16 Nov 2013 11:31:16 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 15907@debbugs.gnu.org
>
> > 1. Start `emacs -Q';
> > 2. Evaluate the following two statements:
> > (add-hook 'after-change-functions (lambda (&rest a) (format "%s" 1)))
> > (substitute-command-keys "\\{emacs-lisp-mode-map}")
> > 3. That's it. Emacs crashes.
> >
> > The crash doesn't happen if you replace the number 1 with a string or
> > a symbol, but it does also happen if you replace it with a list.
>
> It no longer crashes after changes in trunk revision 115119.
>
> > This is most annoying as it causes a crash whenever `describe-mode' is
> > invoked.
>
> Since you didn't show any real-life use cases, I'm not sure that the
> result is what you wanted, please do check.
Actually, I think you will like revision 115120 much better. The
underlying problem was that substitute-command-keys sometimes uses an
internal buffer, whose changes would trigger your after-change
function, which would invoke 'format', which uses the same internal
buffer...
As I now think I know what was your real-life problem, and it is now
fixed, I'm closing this bug report. Feel free to re-open if there are
some leftovers.
Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#15907: 24.3; Emacs crash due to substitute-command-keys and after-change-functions
[not found] ` <CAAdUY-KGJ++9D8uY8dK-R0_FPw1=XfHgQZkf+WuT2SwwVYGo7A@mail.gmail.com>
@ 2013-11-16 12:37 ` Eli Zaretskii
0 siblings, 0 replies; 4+ messages in thread
From: Eli Zaretskii @ 2013-11-16 12:37 UTC (permalink / raw)
To: bruce.connor.am; +Cc: 15907
> Date: Sat, 16 Nov 2013 11:46:21 +0000
> From: Bruce Connor <bruce.connor.am@gmail.com>
>
> The real life use case was that having smart-mode-line active meant emacs
> would crash everytime I hit "C-h m".
>
> However, I patched smart-mode-line with a work around for this yesterday,
> so it's not a use case anymore. I just figured "format" was such a basic
> function that it was good to report it anyway.
You may wish patching your Emacs with the patch below instead.
The problem was not in 'format', but in substitute-command-keys, btw.
Here's how I fixed that:
=== modified file 'src/doc.c'
--- src/doc.c 2013-08-11 01:30:20 +0000
+++ src/doc.c 2013-11-16 10:20:32 +0000
@@ -850,6 +850,7 @@ Otherwise, return a new string, without
/* This is for computing the SHADOWS arg for describe_map_tree. */
Lisp_Object active_maps = Fcurrent_active_maps (Qnil, Qnil);
Lisp_Object earlier_maps;
+ ptrdiff_t count = SPECPDL_INDEX ();
changed = 1;
strp += 2; /* skip \{ or \< */
@@ -886,6 +887,10 @@ Otherwise, return a new string, without
/* Now switch to a temp buffer. */
oldbuf = current_buffer;
set_buffer_internal (XBUFFER (Vprin1_to_string_buffer));
+ /* This is for an unusual case where some after-change
+ function uses 'format' or 'prin1' or something else that
+ will thrash Vprin1_to_string_buffer we are using. */
+ specbind (Qinhibit_modification_hooks, Qt);
if (NILP (tem))
{
@@ -910,6 +915,7 @@ Otherwise, return a new string, without
tem = Fbuffer_string ();
Ferase_buffer ();
set_buffer_internal (oldbuf);
+ unbind_to (count, Qnil);
subst_string:
start = SDATA (tem);
=== modified file 'src/keymap.c'
--- src/keymap.c 2013-08-11 01:30:20 +0000
+++ src/keymap.c 2013-11-16 09:24:19 +0000
@@ -3383,9 +3383,12 @@ describe_map (Lisp_Object map, Lisp_Obje
if (vect[i].shadowed)
{
- SET_PT (PT - 1);
+ ptrdiff_t pt = max (PT - 1, BEG);
+
+ SET_PT (pt);
insert_string ("\n (that binding is currently shadowed by another mode)");
- SET_PT (PT + 1);
+ pt = min (PT + 1, Z);
+ SET_PT (pt);
}
}
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-11-16 12:37 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-15 21:23 bug#15907: 24.3; Emacs crash due to substitute-command-keys and after-change-functions Artur Malabarba
2013-11-16 9:31 ` Eli Zaretskii
2013-11-16 10:29 ` Eli Zaretskii
[not found] ` <CAAdUY-KGJ++9D8uY8dK-R0_FPw1=XfHgQZkf+WuT2SwwVYGo7A@mail.gmail.com>
2013-11-16 12:37 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).