Whamcloud - gitweb
LU-4629 utils: fix array overflow
[fs/lustre-release.git] / libcfs / libcfs / util / parser.c
index 949a2b4..b40250b 100644 (file)
@@ -59,21 +59,17 @@ static char * skiptowhitespace(char * s)
 
 static int line2args(char *line, char **argv, int maxargs)
 {
-        char *arg;
-        int i = 0;
+       char *arg;
+       int i = 0;
 
-        arg = strtok(line, " \t");
-        if ( arg ) {
-                argv[i] = arg;
-                i++;
-        } else
-                return 0;
+       arg = strtok(line, " \t");
+       if (arg == NULL || maxargs < 1)
+               return 0;
 
-        while( (arg = strtok(NULL, " \t")) && (i <= maxargs)) {
-                argv[i] = arg;
-                i++;
-        }
-        return i;
+       argv[i++] = arg;
+       while ((arg = strtok(NULL, " \t")) != NULL && i < maxargs)
+               argv[i++] = arg;
+       return i;
 }
 
 /* find a command -- return it if unique otherwise print alternatives */
@@ -460,7 +456,9 @@ int Parser_help(int argc, char **argv)
 
         line[0]='\0';
         for ( i = 1 ;  i < argc ; i++ ) {
-                strcat(line, argv[i]);
+               if (strlen(argv[i]) > sizeof(line)-strlen(line)-1)
+                       return -E2BIG;
+               strncat(line, argv[i], sizeof(line)-strlen(line)-1);
         }
 
         switch ( process(line, &next, top_level, &result, &prev) ) {