svn commit: trunk/busybox/miscutils

vda at busybox.net vda at busybox.net
Fri Jul 4 14:57:13 PDT 2008


Author: vda
Date: 2008-07-04 14:57:11 -0700 (Fri, 04 Jul 2008)
New Revision: 22636

Log:
man: fix missed NULL termination of an array

function                                             old     new   delta
man_main                                             741     721     -20



Modified:
   trunk/busybox/miscutils/man.c


Changeset:
Modified: trunk/busybox/miscutils/man.c
===================================================================
--- trunk/busybox/miscutils/man.c	2008-07-04 20:35:41 UTC (rev 22635)
+++ trunk/busybox/miscutils/man.c	2008-07-04 21:57:11 UTC (rev 22636)
@@ -75,7 +75,7 @@
 	char *sec_list;
 	char *cur_path, *cur_sect;
 	char *line, *value;
-	int count_mp, alloc_mp, cur_mp;
+	int count_mp, cur_mp;
 	int opt, not_found;
 
 	opt_complementary = "-1"; /* at least one argument */
@@ -83,8 +83,8 @@
 	argv += optind;
 
 	sec_list = xstrdup("1:2:3:4:5:6:7:8:9");
-	alloc_mp = 10;
-	man_path_list = xmalloc(10 * sizeof(man_path_list[0]));
+	/* Last valid man_path_list[] is [0x10] */
+	man_path_list = xzalloc(0x11 * sizeof(man_path_list[0]));
 	count_mp = 0;
 	man_path_list[0] = xstrdup(getenv("MANPATH"));
 	if (man_path_list[0])
@@ -109,11 +109,13 @@
 				if (strcmp("MANPATH", line) == 0) {
 					man_path_list[count_mp] = xstrdup(value);
 					count_mp++;
-					if (alloc_mp == count_mp) {
-						alloc_mp += 10;
-						man_path_list = xrealloc(man_path_list, alloc_mp * sizeof(man_path_list[0]));
+					/* man_path_list is NULL terminated */
+					man_path_list[count_mp] = NULL;
+					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) {
 					free(sec_list);



More information about the busybox-cvs mailing list