void socket_client_connection::unix_connect(int max_retries)
{
struct sockaddr_un unix_addr;
+ size_t path_size = path.size();
unix_addr.sun_family = AF_UNIX;
- strcpy (unix_addr.sun_path, path.c_str());
+
+ if (path_size >= sizeof(unix_addr.sun_path))
+ {
+ throw t2n_connect_error((std::string)"path '"
+ + path
+ + "' exceeds permissible UNIX socket path length");
+ }
+
+ memcpy(unix_addr.sun_path, path.c_str(), path_size);
+ unix_addr.sun_path[path_size] = '\0';
sock = socket(PF_UNIX, SOCK_STREAM, 0);
if (!sock)