Commit 622c7e99 authored by Richard Levitte's avatar Richard Levitte
Browse files

Rearrange the use of 'proto' in BIO_lookup



'proto' wasn't properly used as a fallback in all appropriate cases.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 3eefcea1
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -742,7 +742,6 @@ int BIO_lookup(const char *host, const char *service,
#else
        struct servent se_fallback = { NULL, NULL, 0, NULL };
#endif
        char *proto = NULL;

        CRYPTO_THREAD_run_once(&bio_lookup_init, do_bio_lookup_init);

@@ -778,18 +777,13 @@ int BIO_lookup(const char *host, const char *service,

        if (service == NULL) {
            se_fallback.s_port = 0;
            se_fallback.s_proto = proto;
            se_fallback.s_proto = NULL;
            se = &se_fallback;
        } else {
            char *endp = NULL;
            long portnum = strtol(service, &endp, 10);
            char *proto = NULL;

            if (endp != service && *endp == '\0'
                    && portnum > 0 && portnum < 65536) {
                se_fallback.s_port = htons(portnum);
                se_fallback.s_proto = proto;
                se = &se_fallback;
            } else if (endp == service) {
            switch (socktype) {
            case SOCK_STREAM:
                proto = "tcp";
@@ -798,6 +792,13 @@ int BIO_lookup(const char *host, const char *service,
                proto = "udp";
                break;
            }

            if (endp != service && *endp == '\0'
                    && portnum > 0 && portnum < 65536) {
                se_fallback.s_port = htons(portnum);
                se_fallback.s_proto = proto;
                se = &se_fallback;
            } else if (endp == service) {
                se = getservbyname(service, proto);

                if (se == NULL) {