commit d73777c2c3566fb2647727bb56d9a2295b81669b Author: Joachim Wiberg Date: Fri Sep 2 16:12:46 2022 +0200 Fix #163: unterminated username used with getpwnam() Signed-off-by: Joachim Wiberg diff --git a/src/confuse.c b/src/confuse.c index 6d1fdbd..05566b5 100644 --- a/src/confuse.c +++ b/src/confuse.c @@ -1894,18 +1894,20 @@ DLLIMPORT char *cfg_tilde_expand(const char *filename) passwd = getpwuid(geteuid()); file = filename + 1; } else { - /* ~user or ~user/path */ - char *user; + char *user; /* ~user or ~user/path */ + size_t len; file = strchr(filename, '/'); - if (file == 0) + if (file == NULL) file = filename + strlen(filename); - user = malloc(file - filename); + len = file - filename - 1; + user = malloc(len + 1); if (!user) return NULL; - strncpy(user, filename + 1, file - filename - 1); + strncpy(user, &filename[1], len); + user[len] = 0; passwd = getpwnam(user); free(user); }