hush: fix a case where EXIT trap may modify its code mid-flight
function old new delta hush_exit 93 99 +6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b8d076b00b
commit
46f839c3f7
@ -1936,7 +1936,7 @@ static void hush_exit(int exitcode)
|
|||||||
if (G.exiting <= 0 && G_traps && G_traps[0] && G_traps[0][0]) {
|
if (G.exiting <= 0 && G_traps && G_traps[0] && G_traps[0][0]) {
|
||||||
char *argv[3];
|
char *argv[3];
|
||||||
/* argv[0] is unused */
|
/* argv[0] is unused */
|
||||||
argv[1] = G_traps[0];
|
argv[1] = xstrdup(G_traps[0]); /* copy, since EXIT trap handler may modify G_traps[0] */
|
||||||
argv[2] = NULL;
|
argv[2] = NULL;
|
||||||
G.exiting = 1; /* prevent EXIT trap recursion */
|
G.exiting = 1; /* prevent EXIT trap recursion */
|
||||||
/* Note: G_traps[0] is not cleared!
|
/* Note: G_traps[0] is not cleared!
|
||||||
|
Loading…
Reference in New Issue
Block a user