Simplify maximum socket name length check

This commit is contained in:
Marc André Tanner 2015-02-17 22:46:44 +01:00
parent 98ac772a97
commit 64920e5977
1 changed files with 2 additions and 3 deletions

View File

@ -253,12 +253,11 @@ static int create_socket_dir(struct sockaddr_un *sockaddr) {
static bool set_socket_name(struct sockaddr_un *sockaddr, const char *name) { 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); if (strlen(name) >= maxlen) {
if (sockaddr->sun_path[maxlen-1]) {
sockaddr->sun_path[maxlen-1] = '\0';
errno = ENAMETOOLONG; errno = ENAMETOOLONG;
return false; return false;
} }
strncpy(sockaddr->sun_path, name, maxlen);
} 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)