man: fix missed NULL termination of an array

function                                             old     new   delta
man_main                                             741     721     -20
This commit is contained in:
Denis Vlasenko 2008-07-04 21:57:11 +00:00
parent a8a3b497fc
commit 9835d47acc

View File

@ -75,7 +75,7 @@ int man_main(int argc ATTRIBUTE_UNUSED, char **argv)
char *sec_list; char *sec_list;
char *cur_path, *cur_sect; char *cur_path, *cur_sect;
char *line, *value; char *line, *value;
int count_mp, alloc_mp, cur_mp; int count_mp, cur_mp;
int opt, not_found; int opt, not_found;
opt_complementary = "-1"; /* at least one argument */ opt_complementary = "-1"; /* at least one argument */
@ -83,8 +83,8 @@ int man_main(int argc ATTRIBUTE_UNUSED, char **argv)
argv += optind; argv += optind;
sec_list = xstrdup("1:2:3:4:5:6:7:8:9"); sec_list = xstrdup("1:2:3:4:5:6:7:8:9");
alloc_mp = 10; /* Last valid man_path_list[] is [0x10] */
man_path_list = xmalloc(10 * sizeof(man_path_list[0])); man_path_list = xzalloc(0x11 * sizeof(man_path_list[0]));
count_mp = 0; count_mp = 0;
man_path_list[0] = xstrdup(getenv("MANPATH")); man_path_list[0] = xstrdup(getenv("MANPATH"));
if (man_path_list[0]) if (man_path_list[0])
@ -109,11 +109,13 @@ int man_main(int argc ATTRIBUTE_UNUSED, char **argv)
if (strcmp("MANPATH", line) == 0) { if (strcmp("MANPATH", line) == 0) {
man_path_list[count_mp] = xstrdup(value); man_path_list[count_mp] = xstrdup(value);
count_mp++; count_mp++;
if (alloc_mp == count_mp) { /* man_path_list is NULL terminated */
alloc_mp += 10; man_path_list[count_mp] = NULL;
man_path_list = xrealloc(man_path_list, alloc_mp * sizeof(man_path_list[0])); if (!(count_mp & 0xf)) { /* 0x10, 0x20 etc */
/* so that last valid man_path_list[] is [count_mp + 0x10] */
man_path_list = xrealloc(man_path_list,
(count_mp + 0x11) * sizeof(man_path_list[0]));
} }
/* thus man_path_list is always NULL terminated */
} }
if (strcmp("MANSECT", line) == 0) { if (strcmp("MANSECT", line) == 0) {
free(sec_list); free(sec_list);