commit e93cfd10c08fc61e1eb269d346cc137f83d4b66b
parent 446002bd79b87150c44702d20a3c37df2643fc21
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Tue, 17 Apr 2007 04:38:30 +0000
in real_dir_from_tilde(), fix long-standing problem where directory
names that began with "~", but that weren't users' home directories,
could be erroneously treated as users' home directories (e.g. "~d/"
would be treated as "~daemon/")
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4074 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,11 @@
+2007-04-17 David Lawrence Ramsey <pooka109@gmail.com>
+
+ * files.c (real_dir_from_tilde): Fix long-standing problem where
+ directory names that began with "~", but that weren't users'
+ home directories, could be erroneously treated as users' home
+ directories (e.g. "~d/" would be treated as "~daemon/"). (DLR,
+ found by Justin Fletcher)
+
2007-04-16 David Lawrence Ramsey <pooka109@gmail.com>
* files.c (real_dir_from_tilde): Fix segfault when dealing with
diff --git a/src/files.c b/src/files.c
@@ -1995,7 +1995,8 @@ char *real_dir_from_tilde(const char *buf)
do {
userdata = getpwent();
} while (userdata != NULL &&
- strncmp(userdata->pw_name, buf + 1, i - 1) != 0);
+ (strncmp(userdata->pw_name, buf + 1, i - 1) != 0 ||
+ strlen(userdata->pw_name) != strnlen(buf + 1, i - 1)));
endpwent();
if (userdata != NULL)
tilde_dir = userdata->pw_dir;