Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-4629 utils: fix array overflow
[fs/lustre-release.git]
/
libcfs
/
libcfs
/
util
/
parser.c
diff --git
a/libcfs/libcfs/util/parser.c
b/libcfs/libcfs/util/parser.c
index
949a2b4
..
b40250b
100644
(file)
--- a/
libcfs/libcfs/util/parser.c
+++ b/
libcfs/libcfs/util/parser.c
@@
-59,21
+59,17
@@
static char * skiptowhitespace(char * s)
static int line2args(char *line, char **argv, int maxargs)
{
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 */
}
/* 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++ ) {
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) ) {
}
switch ( process(line, &next, top_level, &result, &prev) ) {