Make arg splitting in visudo and sudoedit consistent.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 19 Nov 2004 17:55:14 +0000 (17:55 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 19 Nov 2004 17:55:14 +0000 (17:55 +0000)
sudo_edit.c
visudo.c

index d5e71ad88a651d71a70422f39b1aff012b55e384..8b3a97c6edb0f22926f2aaa10fad4fcfdac3e3ca 100644 (file)
@@ -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;
index f3fae1ce8ee5d51c28a3ad9145d846d2cab5d711..8045721ba75af19581c5e4888af16c8769e4c3ad 100644 (file)
--- 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);