Commit d40cf9bc authored by Richard Levitte's avatar Richard Levitte
Browse files

VMS getnameinfo() seems to have a bug with returned service string



It seems like it gives back gibberish.  If we asked for a numeric
service, it's easy to check for a digit in the first position, and
if there isn't any, rewrite it using older methods.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent e8461ee1
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@

#include <openssl/err.h>
#include <openssl/buffer.h>
#include <ctype.h>

/*
 * Throughout this file and bio_lcl.h, the existence of the macro
@@ -250,6 +251,16 @@ static int addr_strings(const BIO_ADDR *ap, int numeric,
            }
            return 0;
        }

        /* VMS getnameinfo() seems to have a bug, where serv gets filled
         * with gibberish.  We can at least check for digits when flags
         * has NI_NUMERICSERV enabled
         */
        if ((flags & NI_NUMERICSERV) != 0 && !isdigit(serv[0])) {
            BIO_snprintf(serv, sizeof(serv), "%d",
                         ntohs(BIO_ADDR_rawport(ap)));
        }

        if (hostname)
            *hostname = OPENSSL_strdup(host);
        if (service)