12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- From d73777c2c3566fb2647727bb56d9a2295b81669b Mon Sep 17 00:00:00 2001
- From: Joachim Wiberg <troglobit@gmail.com>
- Date: Fri, 2 Sep 2022 16:12:46 +0200
- Subject: [PATCH] Fix #163: unterminated username used with getpwnam()
- Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
- [Retrieved (and backported) from:
- https://github.com/libconfuse/libconfuse/commit/d73777c2c3566fb2647727bb56d9a2295b81669b]
- Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- ---
- src/confuse.c | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
- 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)
- 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);
- }
|