From f68754f0948197a213b90f1d0f30a754e210c8e1 Mon Sep 17 00:00:00 2001 From: coolacid Date: Wed, 13 Dec 2023 08:08:36 -0500 Subject: [PATCH] Correctly sets size in bind/connect to fixed name of abstract --- reflector/UnixDgramSocket.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/reflector/UnixDgramSocket.cpp b/reflector/UnixDgramSocket.cpp index ff21399..2075fdb 100644 --- a/reflector/UnixDgramSocket.cpp +++ b/reflector/UnixDgramSocket.cpp @@ -48,7 +48,9 @@ bool CUnixDgramReader::Open(const char *path) // returns true on failure addr.sun_family = AF_UNIX; strncpy(addr.sun_path+1, path, sizeof(addr.sun_path)-2); - int rval = bind(fd, (struct sockaddr *)&addr, sizeof(addr)); + // We know path is a string, so we skip the first null, get the string length and add 1 for the begining Null + int path_len = sizeof(addr.sun_family) + strlen(addr.sun_path + 1) + 1; + int rval = bind(fd, (struct sockaddr *)&addr, path_len); if (rval < 0) { std::cerr << "bind() failed for " << path << ": " << strerror(errno) << std::endl; @@ -139,7 +141,9 @@ ssize_t CUnixDgramWriter::Write(const void *buf, ssize_t size) const return -1; } // connect to the receiver - int rval = connect(fd, (struct sockaddr *)&addr, sizeof(addr)); + // We know path is a string, so we skip the first null, get the string length and add 1 for the begining Null + int path_len = sizeof(addr.sun_family) + strlen(addr.sun_path + 1) + 1; + int rval = connect(fd, (struct sockaddr *)&addr, path_len); if (rval < 0) { std::cerr << "connect() failed for " << addr.sun_path+1 << ": " << strerror(errno) << std::endl;