mirror of
https://github.com/jarun/nnn.git
synced 2025-01-15 21:36:42 +00:00
handle tilde more strictly in mkpath and abspath
otherwise, if a file is named "~" it will get incorrectly expanded into $HOME and disaster can happen.
This commit is contained in:
parent
8dbd9da0cc
commit
3a30211e6c
15
src/nnn.c
15
src/nnn.c
|
@ -1132,6 +1132,11 @@ static inline bool tilde_is_home(const char *s)
|
||||||
return s[0] == '~' && (s[1] == '\0' || s[1] == '/');
|
return s[0] == '~' && (s[1] == '\0' || s[1] == '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool tilde_is_home_strict(const char *s)
|
||||||
|
{
|
||||||
|
return s[0] == '~' && s[1] == '/';
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Updates out with "dir/name or "/name"
|
* Updates out with "dir/name or "/name"
|
||||||
* Returns the number of bytes copied including the terminating NULL byte
|
* Returns the number of bytes copied including the terminating NULL byte
|
||||||
|
@ -1142,10 +1147,8 @@ static size_t mkpath(const char *dir, const char *name, char *out)
|
||||||
{
|
{
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
|
|
||||||
if (tilde_is_home(name)) { //NOLINT
|
if (tilde_is_home_strict(name)) { //NOLINT
|
||||||
len = xstrsncpy(out, home, PATH_MAX);
|
len = xstrsncpy(out, home, PATH_MAX);
|
||||||
if (!name[1])
|
|
||||||
return len;
|
|
||||||
--len;
|
--len;
|
||||||
++name;
|
++name;
|
||||||
} else if (name[0] != '/') { // NOLINT
|
} else if (name[0] != '/') { // NOLINT
|
||||||
|
@ -1212,11 +1215,9 @@ static char *abspath(const char *filepath, char *cwd, char *buf)
|
||||||
if (!path)
|
if (!path)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (tilde_is_home(path)) {
|
if (tilde_is_home_strict(path)) {
|
||||||
cwd = home;
|
cwd = home;
|
||||||
++path;
|
path += 2; /* advance 2 bytes past the "~/" */
|
||||||
if (*path == '/')
|
|
||||||
++path;
|
|
||||||
} else if ((path[0] != '/') && !cwd) {
|
} else if ((path[0] != '/') && !cwd) {
|
||||||
cwd = getcwd(NULL, 0);
|
cwd = getcwd(NULL, 0);
|
||||||
if (!cwd)
|
if (!cwd)
|
||||||
|
|
Loading…
Reference in a new issue