Use vis(3) to encode/decode the target for symlinks.
Make vis(3) decode errors fatal for both symlink targets and fienames.
This commit is contained in:
parent
013d7d5d53
commit
670097c87d
@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <vis.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
@ -350,11 +351,13 @@ ftype(u_int type)
|
||||
char *
|
||||
rlink(char *name)
|
||||
{
|
||||
static char lbuf[MAXPATHLEN];
|
||||
char tbuf[MAXPATHLEN];
|
||||
static char lbuf[MAXPATHLEN * 4];
|
||||
int len;
|
||||
|
||||
if ((len = readlink(name, lbuf, sizeof(lbuf) - 1)) == -1)
|
||||
if ((len = readlink(name, tbuf, sizeof(tbuf) - 1)) == -1)
|
||||
err(1, "line %d: %s", lineno, name);
|
||||
lbuf[len] = '\0';
|
||||
tbuf[len] = '\0';
|
||||
strvis(lbuf, tbuf, VIS_WHITE | VIS_OCTAL);
|
||||
return (lbuf);
|
||||
}
|
||||
|
@ -143,11 +143,8 @@ noparent: errx(1, "line %d: no parent node", lineno);
|
||||
#define MAGIC "?*["
|
||||
if (strpbrk(p, MAGIC))
|
||||
centry->flags |= F_MAGIC;
|
||||
if (strunvis(centry->name, p) == -1) {
|
||||
warnx("filename %s is ill-encoded and literally used",
|
||||
p);
|
||||
strcpy(centry->name, p);
|
||||
}
|
||||
if (strunvis(centry->name, p) == -1)
|
||||
errx(1, "filename %s is ill-encoded", p);
|
||||
set(NULL, centry);
|
||||
|
||||
if (!root) {
|
||||
@ -244,8 +241,11 @@ set(char *t, NODE *ip)
|
||||
lineno, val);
|
||||
break;
|
||||
case F_SLINK:
|
||||
if ((ip->slink = strdup(val)) == NULL)
|
||||
errx(1, "strdup");
|
||||
ip->slink = malloc(strlen(val));
|
||||
if (ip->slink == NULL)
|
||||
errx(1, "malloc");
|
||||
if (strunvis(ip->slink, val) == -1)
|
||||
errx(1, "symlink %s is ill-encoded", val);
|
||||
break;
|
||||
case F_TIME:
|
||||
ip->st_mtimespec.tv_sec = strtoul(val, &ep, 10);
|
||||
|
Loading…
Reference in New Issue
Block a user