pwdx: fails when run in a nonexistent locale

pwdx rather mysteriously fails with "invalid process id" when run in a
nonexistent locale (e.g. "LC_ALL=foo pwdx $$").  This is because it
fails to obey the documented calling sequence for strtol - that is, set
errno to 0 before the call - and thus the errno from the setlocale
failure bleeds over into its check for whether strtol failed.

References: http://bugs.debian.org/718766

Signed-off-by: Craig Small <csmall@enc.com.au>
This commit is contained in:
Colin Watson 2013-08-05 20:52:22 +10:00 committed by Craig Small
parent b83788993b
commit 26ae657950

1
pwdx.c
View File

@ -52,6 +52,7 @@ int check_pid_argument(char *input)
if (!strncmp("/proc/", input, 6)) if (!strncmp("/proc/", input, 6))
skip = 6; skip = 6;
errno = 0;
pid = strtol(input + skip, &end, 10); pid = strtol(input + skip, &end, 10);
if (errno || input + skip == end || (end && *end)) if (errno || input + skip == end || (end && *end))