summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2015-03-03 13:10:30 +0100
committerDenys Vlasenko2015-03-03 13:10:30 +0100
commit2ec4f44225f18bc00732cac21f3fde9d3dc2f29f (patch)
treed269e1017864c50c4ec59dfa199e851615d5cd97
parent3aef814c0b08d9703280b4772060ce5016c683c4 (diff)
downloadbusybox-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>
-rw-r--r--networking/inetd.c8
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.