X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fsocket_client.cpp;h=fecad13ffc7eedcf4e9e51a14da5d43eced80908;hp=9f0064bf23d35c3ca8c29edf73ff797470d2b1ba;hb=7d9c3eea7fd46abff305827c9e3f1fc7e5ab1e5d;hpb=44b4600fd51677e54dd167734ca9252b58237cda diff --git a/src/socket_client.cpp b/src/socket_client.cpp index 9f0064b..fecad13 100644 --- a/src/socket_client.cpp +++ b/src/socket_client.cpp @@ -159,9 +159,19 @@ void socket_client_connection::tcp_connect(int max_retries) 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)