X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fsocket_client.cpp;h=fecad13ffc7eedcf4e9e51a14da5d43eced80908;hp=9f0064bf23d35c3ca8c29edf73ff797470d2b1ba;hb=a63e08b83794273da3840e0b8bf15bf0085fe3c4;hpb=19facd8558fe2e32ce843860b40631ebe03ff3cf 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)