mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-05-13 11:06:17 +02:00
41275: Leave stdin open when executing widgets
This commit is contained in:
parent
eb783754bd
commit
4d007e269d
|
@ -1,3 +1,8 @@
|
|||
2017-06-13 Eric Cook <llua@gmx.com>
|
||||
|
||||
* Stephane: 41275: Src/Zle/zle_main.c: Leave stdin open
|
||||
when executing widgets.
|
||||
|
||||
2017-06-13 Peter Stephenson <p.stephenson@samsung.com>
|
||||
|
||||
* 41284: Src/builtin.c, Test/B01cd.ztst: fix null dereference on
|
||||
|
|
|
@ -750,12 +750,12 @@ sect(User-Defined Widgets)
|
|||
cindex(widgets, user-defined)
|
||||
User-defined widgets, being implemented as shell functions,
|
||||
can execute any normal shell command. They can also run other widgets
|
||||
(whether built-in or user-defined) using the tt(zle) builtin command.
|
||||
The standard input of the function is closed to prevent external commands
|
||||
from unintentionally blocking ZLE by reading from the terminal, but
|
||||
tt(read -k) or tt(read -q) can be used to read characters. Finally,
|
||||
they can examine and edit the ZLE buffer being edited by
|
||||
reading and setting the special parameters described below.
|
||||
(whether built-in or user-defined) using the tt(zle) builtin command. The
|
||||
standard input of the function is redirected from /dev/null to prevent
|
||||
external commands from unintentionally blocking ZLE by reading from the
|
||||
terminal, but tt(read -k) or tt(read -q) can be used to read characters.
|
||||
Finally, they can examine and edit the ZLE buffer being edited by reading
|
||||
and setting the special parameters described below.
|
||||
|
||||
cindex(parameters, editor)
|
||||
cindex(parameters, zle)
|
||||
|
|
4
NEWS
4
NEWS
|
@ -14,6 +14,10 @@ expansion (see zshexpn(1)), so they could neither be quoted nor be the
|
|||
result of parameter expansion. Examples: 's=command; $s -V ls' and
|
||||
'\command -V ls' now work as expected.
|
||||
|
||||
Functions executed by ZLE widgets no longer have they standard input
|
||||
closed, but is now redirected from /dev/null instead. That still guards
|
||||
against user defined widgets inadvertently reading from the tty device.
|
||||
|
||||
|
||||
Changes from 5.2 to 5.3.1
|
||||
-------------------------
|
||||
|
|
6
README
6
README
|
@ -74,6 +74,12 @@ to undo the escaping with:
|
|||
|
||||
This is also needed if $vcs_info_msg_0_ is used to set $psvar.
|
||||
|
||||
4) functions executed by ZLE widgets no longer have they standard input
|
||||
closed, but is now redirected from /dev/null instead. That still guards
|
||||
against user defined widgets inadvertently reading from the tty device,
|
||||
and addresses the antisocial behaviour of running a command with its
|
||||
stdin closed.
|
||||
|
||||
Incompatibilities between 5.0.8 and 5.3
|
||||
----------------------------------------
|
||||
|
||||
|
|
|
@ -1485,6 +1485,13 @@ execzlefunc(Thingy func, char **args, int set_bindk)
|
|||
int inuse = w->flags & WIDGET_INUSE;
|
||||
w->flags |= WIDGET_INUSE;
|
||||
|
||||
if (osi > 0) {
|
||||
/*
|
||||
* Many commands don't like having a closed stdin, open on
|
||||
* /dev/null instead
|
||||
*/
|
||||
open("/dev/null", O_RDWR | O_NOCTTY); /* ignore failure */
|
||||
}
|
||||
if (*args) {
|
||||
largs = newlinklist();
|
||||
addlinknode(largs, dupstring(w->u.fnnam));
|
||||
|
|
Loading…
Reference in New Issue