diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2015-03-03 13:10:30 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2015-03-03 13:10:30 +0100 |
| commit | 2ec4f44225f18bc00732cac21f3fde9d3dc2f29f (patch) | |
| tree | d269e1017864c50c4ec59dfa199e851615d5cd97 | |
| parent | 3aef814c0b08d9703280b4772060ce5016c683c4 (diff) | |
| download | busybox-w32-2ec4f44225f18bc00732cac21f3fde9d3dc2f29f.tar.gz busybox-w32-2ec4f44225f18bc00732cac21f3fde9d3dc2f29f.tar.bz2 busybox-w32-2ec4f44225f18bc00732cac21f3fde9d3dc2f29f.zip | |
inetd: fix order of array index check and array access
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -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 b3f2e9fbc..8148925ce 100644 --- a/networking/inetd.c +++ b/networking/inetd.c | |||
| @@ -645,7 +645,7 @@ static servtab_t *dup_servtab(servtab_t *sep) | |||
| 645 | } | 645 | } |
| 646 | 646 | ||
| 647 | /* gcc generates much more code if this is inlined */ | 647 | /* gcc generates much more code if this is inlined */ |
| 648 | static servtab_t *parse_one_line(void) | 648 | static NOINLINE servtab_t *parse_one_line(void) |
| 649 | { | 649 | { |
| 650 | int argc; | 650 | int argc; |
| 651 | char *token[6+MAXARGV]; | 651 | char *token[6+MAXARGV]; |
| @@ -675,6 +675,8 @@ static servtab_t *parse_one_line(void) | |||
| 675 | * default host for the following lines. */ | 675 | * default host for the following lines. */ |
| 676 | free(default_local_hostname); | 676 | free(default_local_hostname); |
| 677 | default_local_hostname = sep->se_local_hostname; | 677 | default_local_hostname = sep->se_local_hostname; |
| 678 | /*sep->se_local_hostname = NULL; - redundant */ | ||
| 679 | /* (we'll overwrite this field anyway) */ | ||
| 678 | goto more; | 680 | goto more; |
| 679 | } | 681 | } |
| 680 | } else | 682 | } else |
| @@ -688,10 +690,10 @@ static servtab_t *parse_one_line(void) | |||
| 688 | parse_err: | 690 | parse_err: |
| 689 | bb_error_msg("parse error on line %u, line is ignored", | 691 | bb_error_msg("parse error on line %u, line is ignored", |
| 690 | parser->lineno); | 692 | parser->lineno); |
| 691 | free_servtab_strings(sep); | ||
| 692 | /* Just "goto more" can make sep to carry over e.g. | 693 | /* Just "goto more" can make sep to carry over e.g. |
| 693 | * "rpc"-ness (by having se_rpcver_lo != 0). | 694 | * "rpc"-ness (by having se_rpcver_lo != 0). |
| 694 | * We will be more paranoid: */ | 695 | * We will be more paranoid: */ |
| 696 | free_servtab_strings(sep); | ||
| 695 | free(sep); | 697 | free(sep); |
| 696 | goto new; | 698 | goto new; |
| 697 | } | 699 | } |
| @@ -815,7 +817,7 @@ static servtab_t *parse_one_line(void) | |||
| 815 | } | 817 | } |
| 816 | #endif | 818 | #endif |
| 817 | argc = 0; | 819 | argc = 0; |
| 818 | while ((arg = token[6+argc]) != NULL && argc < MAXARGV) | 820 | while (argc < MAXARGV && (arg = token[6+argc]) != NULL) |
| 819 | sep->se_argv[argc++] = xstrdup(arg); | 821 | sep->se_argv[argc++] = xstrdup(arg); |
| 820 | /* Some inetd.conf files have no argv's, not even argv[0]. | 822 | /* Some inetd.conf files have no argv's, not even argv[0]. |
| 821 | * Fix them up. | 823 | * Fix them up. |
