On Mon, Mar 14, 2022 at 12:17 AM Iain Sandoe via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Some versions of the BSD getaddrinfo() call do not work with the specific
> input of "0" for the servname entry (a segv results).  Since we are making
> the call with a dummy port number, the value is actually not important, other
> than it should be in range.  Work around the BSD bug by using "1" instead.
>
> tested on powerpc,i686-darwin9, x86-64-darwin10,17,20
> powerpc64le,powerpc64,x86_64-linux-gnu,
>
> OK for master?
> eventual backports?

Why does the nullptr solution not work here?

> thanks
> Iain
>
> Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
>
> c++tools/ChangeLog:
>
>         * server.cc (accept_from): Use "1" as the dummy port number.
> ---
>  c++tools/server.cc | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/c++tools/server.cc b/c++tools/server.cc
> index 8c6ad314886..00154a05925 100644
> --- a/c++tools/server.cc
> +++ b/c++tools/server.cc
> @@ -360,7 +360,11 @@ accept_from (char *arg ATTRIBUTE_UNUSED)
>    hints.ai_next = NULL;
>
>    struct addrinfo *addrs = NULL;
> -  if (int e = getaddrinfo (slash == arg ? NULL : arg, "0", &hints, &addrs))
> +  /* getaddrinfo requires either hostname or servname to be non-null, so 
> that we must
> +     set a port number (to cover the case that the string passed contains 
> just /NN).
> +     Use an arbitrary in-range port number, but avoiding "0" which triggers 
> a bug on
> +     some BSD variants.  */
> +  if (int e = getaddrinfo (slash == arg ? NULL : arg, "1", &hints, &addrs))
>      {
>        noisy ("cannot resolve '%s': %s", arg, gai_strerror (e));
>        ok = false;
> --
> 2.24.3 (Apple Git-128)
>

Reply via email to