On Mon, Mar 14, 2022 at 9:03 AM Iain Sandoe <i...@sandoe.co.uk> wrote:
>
>
>
> > On 14 Mar 2022, at 07:45, Richard Biener <richard.guent...@gmail.com> wrote:
> >
> > 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?
>
> Because this code is setting a netmask and, if I read it correctly (we do not 
> seem to have
> a test for it), it can be called with “/NN” (where NN is the number of bits 
> and there is no host
> name before the slash).
>
> So in this case, in the getaddrinfo() call, the “hostname” parm is set to 
> NULL, and we must
> supply a service-name/port number (for the “servname” parm), since 
> getaddrinfo() does not
> permit both to be NULL.

I see.  I guess the fix is OK then.

Richard.

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