diff --git a/os/Xtranssock.c b/os/Xtranssock.c index 2e2f96e2b9..9335525bc0 100644 --- a/os/Xtranssock.c +++ b/os/Xtranssock.c @@ -622,7 +622,7 @@ set_sun_path(const char *port, const char *upath, char *path, int abstract) struct sockaddr_un s; ssize_t maxlen = sizeof(s.sun_path) - 1; const char *at = ""; - + char * buf; if (!port || !*port || !path) return -1; @@ -638,7 +638,11 @@ set_sun_path(const char *port, const char *upath, char *path, int abstract) if ((ssize_t)(strlen(at) + strlen(upath) + strlen(port)) > maxlen) return -1; - snprintf(path, sizeof(s.sun_path), "%s%s%s", at, upath, port); + + asprintf(&buf, "%s%s%s", at, upath, port); + strncpy(path, buf, sizeof(s.sun_path)-1); + s.sun_path[sizeof(s.sun_path)-1] = '\0'; + free(buf); return 0; } #endif