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) >