mirror of https://github.com/martanne/abduco
Better error message in case session name is too long
This commit is contained in:
parent
3cfa99a031
commit
0a94807d60
14
abduco.c
14
abduco.c
|
|
@ -249,19 +249,27 @@ static bool set_socket_name(struct sockaddr_un *sockaddr, const char *name) {
|
||||||
size_t maxlen = sizeof(sockaddr->sun_path);
|
size_t maxlen = sizeof(sockaddr->sun_path);
|
||||||
if (name[0] == '/') {
|
if (name[0] == '/') {
|
||||||
strncpy(sockaddr->sun_path, name, maxlen);
|
strncpy(sockaddr->sun_path, name, maxlen);
|
||||||
if (sockaddr->sun_path[maxlen-1])
|
if (sockaddr->sun_path[maxlen-1]) {
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
} else if (name[0] == '.' && (name[1] == '.' || name[1] == '/')) {
|
} else if (name[0] == '.' && (name[1] == '.' || name[1] == '/')) {
|
||||||
char buf[maxlen], *cwd = getcwd(buf, sizeof buf);
|
char buf[maxlen], *cwd = getcwd(buf, sizeof buf);
|
||||||
if (!cwd)
|
if (!cwd)
|
||||||
return false;
|
return false;
|
||||||
int len = snprintf(sockaddr->sun_path, maxlen, "%s/%s", cwd, name);
|
int len = snprintf(sockaddr->sun_path, maxlen, "%s/%s", cwd, name);
|
||||||
if (len < 0 || (size_t)len >= maxlen)
|
if (len < 0)
|
||||||
return false;
|
return false;
|
||||||
|
if ((size_t)len >= maxlen) {
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
int dir_len = create_socket_dir(sockaddr);
|
int dir_len = create_socket_dir(sockaddr);
|
||||||
if (dir_len == -1 || dir_len + strlen(name) + strlen(server.host) >= maxlen)
|
if (dir_len == -1 || dir_len + strlen(name) + strlen(server.host) >= maxlen) {
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
strncat(sockaddr->sun_path, name, maxlen - strlen(sockaddr->sun_path) - 1);
|
strncat(sockaddr->sun_path, name, maxlen - strlen(sockaddr->sun_path) - 1);
|
||||||
strncat(sockaddr->sun_path, server.host, maxlen - strlen(sockaddr->sun_path) - 1);
|
strncat(sockaddr->sun_path, server.host, maxlen - strlen(sockaddr->sun_path) - 1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue