diff options
author | Denys Vlasenko | 2015-03-03 13:10:30 +0100 |
---|---|---|
committer | Denys Vlasenko | 2015-03-03 13:10:30 +0100 |
commit | 2ec4f44225f18bc00732cac21f3fde9d3dc2f29f (patch) | |
tree | d269e1017864c50c4ec59dfa199e851615d5cd97 /networking | |
parent | 3aef814c0b08d9703280b4772060ce5016c683c4 (diff) | |
download | busybox-2ec4f44225f18bc00732cac21f3fde9d3dc2f29f.zip busybox-2ec4f44225f18bc00732cac21f3fde9d3dc2f29f.tar.gz |
inetd: fix order of array index check and array access
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking')
-rw-r--r-- | networking/inetd.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/networking/inetd.c b/networking/inetd.c index b3f2e9f..8148925 100644 --- a/networking/inetd.c +++ b/networking/inetd.c @@ -645,7 +645,7 @@ static servtab_t *dup_servtab(servtab_t *sep) } /* gcc generates much more code if this is inlined */ -static servtab_t *parse_one_line(void) +static NOINLINE servtab_t *parse_one_line(void) { int argc; char *token[6+MAXARGV]; @@ -675,6 +675,8 @@ static servtab_t *parse_one_line(void) * default host for the following lines. */ free(default_local_hostname); default_local_hostname = sep->se_local_hostname; + /*sep->se_local_hostname = NULL; - redundant */ + /* (we'll overwrite this field anyway) */ goto more; } } else @@ -688,10 +690,10 @@ static servtab_t *parse_one_line(void) parse_err: bb_error_msg("parse error on line %u, line is ignored", parser->lineno); - free_servtab_strings(sep); /* Just "goto more" can make sep to carry over e.g. * "rpc"-ness (by having se_rpcver_lo != 0). * We will be more paranoid: */ + free_servtab_strings(sep); free(sep); goto new; } @@ -815,7 +817,7 @@ static servtab_t *parse_one_line(void) } #endif argc = 0; - while ((arg = token[6+argc]) != NULL && argc < MAXARGV) + while (argc < MAXARGV && (arg = token[6+argc]) != NULL) sep->se_argv[argc++] = xstrdup(arg); /* Some inetd.conf files have no argv's, not even argv[0]. * Fix them up. |