emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Emacs-diffs] master 5b5f441: read_key_sequence: correct the handlin


From: Stefan Monnier
Subject: Re: [Emacs-diffs] master 5b5f441: read_key_sequence: correct the handling of raw_keybuf in recursive calls
Date: Mon, 20 Nov 2017 15:09:45 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

>> >        /* Calling read_char with COMMANDFLAG = -2 avoids
>> >           redisplay in read_char and its subroutines.  */
>> >        key = read_char (prevent_redisplay ? -2 : NILP (prompt),
>> >                         current_binding, last_nonmenu_event,
>> >                               &used_mouse_menu, NULL);
>> > +            raw_keybuf_count = outer_raw_keybuf_count;
>> > +            raw_keybuf = outer_raw_keybuf;
>> But here I worry: what if `read_char` exits non-locally because of
>> a signal or a throw?
> raw_keybuf{,_count} should then be re-initialised in command_loop_1 to
> the static buffer variables, just before the call to read_key_sequence.

But this `read_char` is within read_key_sequence: this read_key_sequence
may have been called from anywhere, so after we exit it (non-locally),
we may end up running arbitrary Elisp code before we return to
command_loop_1, can't we?  And during this time we'll have raw_keybuf
pointing to an out-of-date stack location, which seems
eminently dangerous.

I think we need to setup an unwind protection of some kind.


        Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]