From: Todd C. Miller Date: Fri, 19 Nov 2004 17:55:14 +0000 (+0000) Subject: Make arg splitting in visudo and sudoedit consistent. X-Git-Tag: SUDO_1_7_0~799 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6a78b9194919c2fcaa921a7a4a1c7069d07c8e4f;p=sudo Make arg splitting in visudo and sudoedit consistent. --- diff --git a/sudo_edit.c b/sudo_edit.c index d5e71ad88..8b3a97c6e 100644 --- a/sudo_edit.c +++ b/sudo_edit.c @@ -68,7 +68,7 @@ int sudo_edit(argc, argv) const char *tmpdir; char **nargv, **ap, *editor, *cp; char buf[BUFSIZ]; - int error, i, ac, ofd, tfd, nargc, rval, tmplen; + int error, i, ac, ofd, tfd, nargc, rval, tmplen, wasblank; sigaction_t sa; struct stat sb; struct timespec ts1, ts2; @@ -197,9 +197,13 @@ int sudo_edit(argc, argv) * line args so look for those and alloc space for them too. */ nargc = argc; - for (cp = editor + 1; *cp != '\0'; cp++) { - if (isblank((unsigned char)cp[0]) && !isblank((unsigned char)cp[-1])) + for (wasblank = FALSE, cp = editor; *cp != '\0'; cp++) { + if (isblank((unsigned char) *cp)) + wasblank = TRUE; + else if (wasblank) { + wasblank = FALSE; nargc++; + } } nargv = (char **) emalloc2(nargc + 1, sizeof(char *)); ac = 0; diff --git a/visudo.c b/visudo.c index f3fae1ce8..8045721ba 100644 --- a/visudo.c +++ b/visudo.c @@ -294,14 +294,14 @@ edit_sudoers(sp, editor, args, lineno) /* Find the length of the argument vector */ ac = 3 + (lineno > 0); if (args) { - int wasspace; + int wasblank; ac++; - for (wasspace = FALSE, cp = args; *cp; cp++) { - if (isspace((unsigned char) *cp)) - wasspace = TRUE; - else if (wasspace) { - wasspace = FALSE; + for (wasblank = FALSE, cp = args; *cp; cp++) { + if (isblank((unsigned char) *cp)) + wasblank = TRUE; + else if (wasblank) { + wasblank = FALSE; ac++; } } @@ -860,11 +860,11 @@ get_args(cmnd) char *args; args = cmnd; - while (*args && !isspace((unsigned char) *args)) + while (*args && !isblank((unsigned char) *args)) args++; if (*args) { *args++ = '\0'; - while (*args && isspace((unsigned char) *args)) + while (*args && isblank((unsigned char) *args)) args++; } return(*args ? args : NULL);