diff options
author | jilles <jilles@FreeBSD.org> | 2014-08-31 20:34:06 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2014-08-31 20:34:06 +0000 |
commit | 1c7ffe47627d1d4ed4d2c3ad0aef344c4fdee92d (patch) | |
tree | 780218b7495d71ca2fd15217cc47cd8120b93847 /usr.bin/pathchk | |
parent | bd6edcc077ffc3e30265b53cb1cff6c4f2e9d80c (diff) | |
download | FreeBSD-src-1c7ffe47627d1d4ed4d2c3ad0aef344c4fdee92d.zip FreeBSD-src-1c7ffe47627d1d4ed4d2c3ad0aef344c4fdee92d.tar.gz |
MFC r256800: pathchk: Ensure bytes >= 128 are considered non-portable
characters.
This was not broken on architectures such as ARM where char is unsigned.
Also, remove the first non-portable character from the output. POSIX does
not require this, and printing the first byte may yield an invalid byte
sequence with UTF-8.
PR: 165988
Reported by: Nicolas Rachinsky
Relnotes: yes
Diffstat (limited to 'usr.bin/pathchk')
-rw-r--r-- | usr.bin/pathchk/pathchk.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/usr.bin/pathchk/pathchk.c b/usr.bin/pathchk/pathchk.c index 2d8fa59..3dc901b 100644 --- a/usr.bin/pathchk/pathchk.c +++ b/usr.bin/pathchk/pathchk.c @@ -98,7 +98,7 @@ check(const char *path) { struct stat sb; long complen, namemax, pathmax, svnamemax; - int badch, last; + int last; char *end, *p, *pathd; if ((pathd = strdup(path)) == NULL) @@ -142,9 +142,9 @@ check(const char *path) goto bad; } - if (pflag && (badch = portable(p)) >= 0) { + if (pflag && !portable(p)) { warnx("%s: %s: component contains non-portable " - "character `%c'", path, p, badch); + "character", path, p); goto bad; } @@ -183,8 +183,7 @@ bad: free(pathd); } /* - * Check whether a path component contains only portable characters. Return - * the first non-portable character found. + * Check whether a path component contains only portable characters. */ static int portable(const char *path) @@ -197,7 +196,7 @@ portable(const char *path) s = strspn(path, charset); if (path[s] != '\0') - return (path[s]); + return (0); - return (-1); + return (1); } |