You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by ro...@apache.org on 2013/09/02 20:44:39 UTC

git commit: THRIFT-1481 cpp: Unix domain sockets in C++ do not support the abstract namespace Patch: Ben Craig

Updated Branches:
  refs/heads/master acf15dc30 -> 657b933f2


THRIFT-1481 cpp: Unix domain sockets in C++ do not support the abstract namespace
Patch: Ben Craig


Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/657b933f
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/657b933f
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/657b933f

Branch: refs/heads/master
Commit: 657b933f28ffdaedb49c5a93dc3e0c2ceeae1807
Parents: acf15dc
Author: Roger Meier <ro...@apache.org>
Authored: Mon Sep 2 20:43:57 2013 +0200
Committer: Roger Meier <ro...@apache.org>
Committed: Mon Sep 2 20:43:57 2013 +0200

----------------------------------------------------------------------
 lib/cpp/src/thrift/transport/TServerSocket.cpp | 12 ++++++------
 lib/cpp/src/thrift/transport/TSocket.cpp       | 12 ++++++------
 2 files changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/657b933f/lib/cpp/src/thrift/transport/TServerSocket.cpp
----------------------------------------------------------------------
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp b/lib/cpp/src/thrift/transport/TServerSocket.cpp
old mode 100644
new mode 100755
index 4cecc3b..59a0885
--- a/lib/cpp/src/thrift/transport/TServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp
@@ -304,21 +304,21 @@ void TServerSocket::listen() {
 #ifndef _WIN32
 
     // Unix Domain Socket
-    struct sockaddr_un address;
-    socklen_t len;
+    struct sockaddr_un address = {0};
+    size_t len = path_.size()+1;
 
-    if (path_.length() > sizeof(address.sun_path)) {
+    if (len > sizeof(address.sun_path)) {
       int errno_copy = THRIFT_GET_SOCKET_ERROR;
       GlobalOutput.perror("TSocket::listen() Unix Domain socket path too long", errno_copy);
       throw TTransportException(TTransportException::NOT_OPEN, " Unix Domain socket path too long");
     }
 
     address.sun_family = AF_UNIX;
-    THRIFT_SNPRINTF(address.sun_path, sizeof(address.sun_path), "%s", path_.c_str());
-    len = sizeof(address);
+    memcpy(address.sun_path, path_.c_str(), len);
+    socklen_t structlen = static_cast<socklen_t>(sizeof(address));
 
     do {
-      if (0 == ::bind(serverSocket_, (struct sockaddr *) &address, len)) {
+      if (0 == ::bind(serverSocket_, (struct sockaddr *) &address, structlen)) {
         break;
       }
       // use short circuit evaluation here to only sleep if we need to

http://git-wip-us.apache.org/repos/asf/thrift/blob/657b933f/lib/cpp/src/thrift/transport/TSocket.cpp
----------------------------------------------------------------------
diff --git a/lib/cpp/src/thrift/transport/TSocket.cpp b/lib/cpp/src/thrift/transport/TSocket.cpp
old mode 100644
new mode 100755
index d521bb5..1ea98bd
--- a/lib/cpp/src/thrift/transport/TSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TSocket.cpp
@@ -240,19 +240,19 @@ void TSocket::openConnection(struct addrinfo *res) {
 
 #ifndef _WIN32
 
-    struct sockaddr_un address;
-    socklen_t len;
+    struct sockaddr_un address = {0};
+    size_t len = path_.size()+1;
 
-    if (path_.length() > sizeof(address.sun_path)) {
+    if (len > sizeof(address.sun_path)) {
       int errno_copy = THRIFT_GET_SOCKET_ERROR;
       GlobalOutput.perror("TSocket::open() Unix Domain socket path too long", errno_copy);
       throw TTransportException(TTransportException::NOT_OPEN, " Unix Domain socket path too long");
     }
 
     address.sun_family = AF_UNIX;
-    THRIFT_SNPRINTF(address.sun_path, sizeof(address.sun_path), "%s", path_.c_str());
-    len = sizeof(address);
-    ret = connect(socket_, (struct sockaddr *) &address, len);
+    memcpy(address.sun_path, path_.c_str(), len);
+    socklen_t structlen = static_cast<socklen_t>(sizeof(address));
+    ret = connect(socket_, (struct sockaddr *) &address, structlen);
 
 #else
       GlobalOutput.perror("TSocket::open() Unix Domain socket path not supported on windows", -99);