Re: [PATCH] _AS_REEXEC_WITH_SHELL: don’t use AS_EXIT.

Eric Blake <[email protected]>
Newsgroups gmane.comp.sysutils.autoconf.patches
Organization Red Hat, Inc.
Message-ID <[email protected]>
On 3/13/20 12:52 PM, Zack Weinberg wrote:
> If _AS_REEXEC_WITH_SHELL fails to exec the selected “better” shell
> interpreter, and that failure somehow doesn’t terminate the process,
> it calls AS_EXIT([255]).  This expands to an invocation of as_fn_exit.
> However, the definition of as_fn_exit goes into the M4SH-INIT-FN
> diversion, whereas _AS_REEXEC_WITH_SHELL goes into the M4SH-SANITIZE
> diversion, so as_fn_exit won’t be defined at the point of this use.
> We can’t move the definition of as_fn_exit earlier, because we don’t
> know that the shell supports shell functions until after we get to the
> end of the M4SH-SANITIZE diversion.
> 
> This is only a theoretical bug because, as the comments say, “all the
> known shells bail out after a failed exec.”  However, a shell that
> doesn’t bail out will instead give the user a flood of nonsensical
> error messages (starting with “as_fn_exit: not found” and then going
> on to choke on the rest of the script) so I think we should fix it
> anyway.  There shouldn’t be any problem with using a plain ‘exit’ at
> this point; no traps are active yet, and we are exiting with an
> explicit error code.
> 
> OK to commit?
> 
> zw
> 
> ---
>   lib/m4sugar/m4sh.m4 | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)

ACK

> 
> diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4
> index 92999f58..4af31517 100644
> --- a/lib/m4sugar/m4sh.m4
> +++ b/lib/m4sugar/m4sh.m4
> @@ -294,7 +294,10 @@ exec $1 $as_opts "$as_myself" ${1+"$[@]"}
>   # Admittedly, this is quite paranoid, since all the known shells bail
>   # out after a failed `exec'.
>   AS_ECHO(["$[]0: could not re-execute with $1"]) >&2
> -AS_EXIT([255])])# _AS_REEXEC_WITH_SHELL
> +dnl AS_EXIT cannot be used here because as_fn_exit is not yet defined;
> +dnl code inserted by AS_REQUIRE_SHELL_FN will appear _after_ this point.
> +dnl We shouldn't have to worry about any traps being active at this point.
> +exit 255])# _AS_REEXEC_WITH_SHELL
>   
>   
>   # _AS_PREPARE
> 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.