Procházet zdrojové kódy

avoid buffer overrun when there are more than 128 path entries

* lcr_ifact.c (PATH_LIST_SIZE): Define.
(path_list): Use it.
(ld_library_path_build): Don't store into path_list[path_list_entries]
if the counter is too large.
(ldso_path_build): Likewise.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1883 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jim Meyering před 17 roky
rodič
revize
4c90a7a218
1 změnil soubory, kde provedl 4 přidání a 3 odebrání
  1. 4 3
      lcr/lcr_ifact.c

+ 4 - 3
lcr/lcr_ifact.c

@@ -167,7 +167,8 @@ static inline int lcr_lib_loaded (
 	return (0);
 }
 
-const char *path_list[128];
+enum { PATH_LIST_SIZE = 128 };
+const char *path_list[PATH_LIST_SIZE];
 unsigned int path_list_entries = 0;
 
 static void defaults_path_build (void)
@@ -201,7 +202,7 @@ static void ld_library_path_build (void)
 	p_s = strtok_r (my_ld_library_path, ":", &ptrptr);
 	while (p_s != NULL) {
 		char *p = strdup (p_s);
-		if (p) {
+		if (p && path_list_entries < PATH_LIST_SIZE) {
 			path_list[path_list_entries++] = p;
 		}
 		p_s = strtok_r (NULL, ":", &ptrptr);
@@ -266,7 +267,7 @@ static int ldso_path_build (const char *path, const char *filename)
 			continue;
 		}
 		p = strdup (string);
-		if (p) {
+		if (p && path_list_entries < PATH_LIST_SIZE) {
 			path_list[path_list_entries++] = p;
 		}
 	}