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]

Reply via email to