PROTON-712: check getprotobyname for NULL return value (patch from Sahir Hoda)
git-svn-id: https://svn.apache.org/repos/asf/qpid/proton/trunk@1632092 13f79535-47bb-0310-9956-ffa450edef68 Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/0329abfe Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/0329abfe Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/0329abfe Branch: refs/heads/examples Commit: 0329abfe5562cd435e42c5d78f08341bbc1d4c78 Parents: 07554b9 Author: Rafael H. Schloming <[email protected]> Authored: Wed Oct 15 15:31:20 2014 +0000 Committer: Rafael H. Schloming <[email protected]> Committed: Wed Oct 15 15:31:20 2014 +0000 ---------------------------------------------------------------------- proton-c/src/posix/io.c | 14 ++++++++++++-- proton-c/src/windows/io.c | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0329abfe/proton-c/src/posix/io.c ---------------------------------------------------------------------- diff --git a/proton-c/src/posix/io.c b/proton-c/src/posix/io.c index 8fbbb0b..2284f90 100644 --- a/proton-c/src/posix/io.c +++ b/proton-c/src/posix/io.c @@ -228,7 +228,11 @@ ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t len) { } static inline int pn_create_socket(int af) { - return socket(af, SOCK_STREAM, getprotobyname("tcp")->p_proto); + struct protoent * pe_tcp = getprotobyname("tcp"); + if (pe_tcp == NULL) { + return -1; + } + return socket(af, SOCK_STREAM, pe_tcp->p_proto); } #elif defined(SO_NOSIGPIPE) ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t size) { @@ -238,7 +242,13 @@ ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t size) { } static inline int pn_create_socket(int af) { - int sock = socket(af, SOCK_STREAM, getprotobyname("tcp")->p_proto); + struct protoent * pe_tcp; + int sock; + pe_tcp = getprotobyname("tcp"); + if (pe_tcp == NULL) { + return -1; + } + sock = socket(af, SOCK_STREAM, pe_tcp->p_proto); if (sock == -1) return sock; int optval = 1; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0329abfe/proton-c/src/windows/io.c ---------------------------------------------------------------------- diff --git a/proton-c/src/windows/io.c b/proton-c/src/windows/io.c index b2d528a..ff31b1d 100644 --- a/proton-c/src/windows/io.c +++ b/proton-c/src/windows/io.c @@ -302,7 +302,11 @@ pn_socket_t pn_accept(pn_io_t *io, pn_socket_t listen_sock, char *name, size_t s } static inline pn_socket_t pni_create_socket() { - return socket(AF_INET, SOCK_STREAM, getprotobyname("tcp")->p_proto); + struct protoent * pe_tcp = getprotobyname("tcp"); + if (pe_tcp == NULL) { + return -1; + } + return socket(AF_INET, SOCK_STREAM, pe_tcp->p_proto); } ssize_t pn_send(pn_io_t *io, pn_socket_t sockfd, const void *buf, size_t len) { @@ -375,8 +379,13 @@ static void configure_pipe_socket(pn_io_t *io, pn_socket_t sock) static int pni_socket_pair (pn_io_t *io, SOCKET sv[2]) { // no socketpair on windows. provide pipe() semantics using sockets + struct protoent * pe_tcp = getprotobyname("tcp"); + if (pe_tcp == NULL) { + perror("getprotobyname"); + return -1; + } - SOCKET sock = socket(AF_INET, SOCK_STREAM, getprotobyname("tcp")->p_proto); + SOCKET sock = socket(AF_INET, SOCK_STREAM, pe_tcp->p_proto); if (sock == INVALID_SOCKET) { perror("socket"); return -1; @@ -407,7 +416,7 @@ static int pni_socket_pair (pn_io_t *io, SOCKET sv[2]) { return -1; } - if ((sv[1] = socket(AF_INET, SOCK_STREAM, getprotobyname("tcp")->p_proto)) == INVALID_SOCKET) { + if ((sv[1] = socket(AF_INET, SOCK_STREAM, pe_tcp->p_proto)) == INVALID_SOCKET) { perror("sock1"); closesocket(sock); return -1; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
