diff mbox series

[1/2] libcody: Do not use a dummy port number in getaddrinfo().

Message ID 20220313231522.12419-1-iain@sandoe.co.uk
State New
Headers show
Series [1/2] libcody: Do not use a dummy port number in getaddrinfo(). | expand

Commit Message

Iain Sandoe March 13, 2022, 11:15 p.m. UTC
The getaddrinfo() call requires either a non-null name for the server or
a port service / number.  In the code that opens a connection we have
been calling this with a dummy port number of "0".  Unfortunately this
triggers a crashing bug in some BSD versions (and OSes importing that code).

In this part of the code we do not really need a port number, since it
is not reasonable to open a connection to an unspecified host.

Setting hints ai_flags field to 0, and the servname parm to nullptr works
around the BSD bug in this case.

Also posted upstream.

(fixes bad-mapper-2/3 on the versions affected).

tested on powerpc,i686-darwin9, x86-64-darwin10,17,20 
powerpc64le,powerpc64,x86_64-linux-gnu,

OK for master?
eventual backports?
thanks
Iain

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

libcody/ChangeLog:

	* netclient.cc (OpenInet6): Do not provide a dummy port number
	in the getaddrinfo() call.
---
 libcody/netclient.cc | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

Richard Biener March 14, 2022, 7:41 a.m. UTC | #1
On Mon, Mar 14, 2022 at 12:16 AM Iain Sandoe via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> The getaddrinfo() call requires either a non-null name for the server or
> a port service / number.  In the code that opens a connection we have
> been calling this with a dummy port number of "0".  Unfortunately this
> triggers a crashing bug in some BSD versions (and OSes importing that code).
>
> In this part of the code we do not really need a port number, since it
> is not reasonable to open a connection to an unspecified host.
>
> Setting hints ai_flags field to 0, and the servname parm to nullptr works
> around the BSD bug in this case.
>
> Also posted upstream.
>
> (fixes bad-mapper-2/3 on the versions affected).
>
> tested on powerpc,i686-darwin9, x86-64-darwin10,17,20
> powerpc64le,powerpc64,x86_64-linux-gnu,
>
> OK for master?

LGTM.

> eventual backports?

After a while, yes.

> thanks
> Iain
>
> Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
>
> libcody/ChangeLog:
>
>         * netclient.cc (OpenInet6): Do not provide a dummy port number
>         in the getaddrinfo() call.
> ---
>  libcody/netclient.cc | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/libcody/netclient.cc b/libcody/netclient.cc
> index 7f81dd91810..558808be485 100644
> --- a/libcody/netclient.cc
> +++ b/libcody/netclient.cc
> @@ -93,7 +93,7 @@ int OpenInet6 (char const **e, char const *name, int port)
>      }
>
>    addrinfo hints;
> -  hints.ai_flags = AI_NUMERICSERV;
> +  hints.ai_flags = 0;
>    hints.ai_family = AF_INET6;
>    hints.ai_socktype = SOCK_STREAM;
>    hints.ai_protocol = 0;
> @@ -102,9 +102,7 @@ int OpenInet6 (char const **e, char const *name, int port)
>    hints.ai_canonname = nullptr;
>    hints.ai_next = nullptr;
>
> -  /* getaddrinfo requires a port number, but is quite happy to accept
> -     invalid ones.  So don't rely on it.  */
> -  if (int err = getaddrinfo (name, "0", &hints, &addrs))
> +  if (int err = getaddrinfo (name, nullptr, &hints, &addrs))
>      {
>        errstr = gai_strerror (err);
>        // What's the best errno to set?
> --
> 2.24.3 (Apple Git-128)
>
diff mbox series

Patch

diff --git a/libcody/netclient.cc b/libcody/netclient.cc
index 7f81dd91810..558808be485 100644
--- a/libcody/netclient.cc
+++ b/libcody/netclient.cc
@@ -93,7 +93,7 @@  int OpenInet6 (char const **e, char const *name, int port)
     }
 
   addrinfo hints;
-  hints.ai_flags = AI_NUMERICSERV;
+  hints.ai_flags = 0;
   hints.ai_family = AF_INET6;
   hints.ai_socktype = SOCK_STREAM;
   hints.ai_protocol = 0;
@@ -102,9 +102,7 @@  int OpenInet6 (char const **e, char const *name, int port)
   hints.ai_canonname = nullptr;
   hints.ai_next = nullptr;
 
-  /* getaddrinfo requires a port number, but is quite happy to accept
-     invalid ones.  So don't rely on it.  */
-  if (int err = getaddrinfo (name, "0", &hints, &addrs))
+  if (int err = getaddrinfo (name, nullptr, &hints, &addrs))
     {
       errstr = gai_strerror (err);
       // What's the best errno to set?