Sophie

Sophie

distrib > Mandriva > 2007.1 > x86_64 > media > main-updates-src > by-pkgid > 781b3286ab043d8685abdda355a82e51 > files > 3

gdm-2.18.0-3.1mdv2007.1.src.rpm

--- gdm-2.16.0/gui/greeter/greeter_item_ulist.c	(revision 5099)
+++ gdm-2.16.0/gui/greeter/greeter_item_ulist.c	(revision 5100)
@@ -146,8 +146,10 @@
 		char **rvec;
 
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL || ve_vector_len (rvec) != 3)
+		if (ve_vector_len (rvec) != 3) {
+			g_strfreev (rvec);
 			continue;
+		}
 
 		g_hash_table_insert (displays_hash,
 				     g_strdup (rvec[1]),
--- gdm-2.16.0/gui/gdmflexiserver.c	(revision 5099)
+++ gdm-2.16.0/gui/gdmflexiserver.c	(revision 5100)
@@ -136,9 +136,10 @@
 	for (i = 0; vec[i] != NULL; i++) {
 		char **rvec;
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL ||
-		    ve_vector_len (rvec) != 3)
+		if (ve_vector_len (rvec) != 3) {
+			g_strfreev (rvec);
 			continue;
+		}
 
 		if (strcmp (rvec[0], vtpart) == 0) {
 			/* could be nested? */
@@ -177,9 +178,10 @@
 		char **rvec;
 		int vt;
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL ||
-		    ve_vector_len (rvec) != 3)
+		if (ve_vector_len (rvec) != 3) {
+			g_strfreev (rvec);
 			continue;
+		}
 
 		vt = get_vt_num (vec, rvec[2], 5);
 
@@ -516,9 +518,10 @@
 		char **rvec;
 		int vt;
 		rvec = g_strsplit (vec[i], ",", -1);
-		if (rvec == NULL ||
-		    ve_vector_len (rvec) != 3)
+		if (ve_vector_len (rvec) != 3) {
+			g_strfreev (rvec);
 			continue;
+		}
 
 		vt = get_vt_num (vec, rvec[2], 5);
 
--- gdm-2.16.0/gui/gdmconfig.c	(revision 5099)
+++ gdm-2.16.0/gui/gdmconfig.c	(revision 5100)
@@ -214,11 +214,11 @@
 	}
 
 	/* skip the "OK " */
-        splitstr = g_strsplit (result + 3, ";", 0);
-	sec = splitstr;
+	splitstr = g_strsplit (result + 3, ";", 0);
+	sec      = splitstr;
 	g_free (result);
 
-        while (*sec != NULL) {
+	while (sec != NULL && *sec != NULL) {
 		GdmXserver *svr = g_new0 (GdmXserver, 1);
 
 		temp = gdm_config_get_xserver_details (*sec, "ID");
--- gdm-2.16.0/daemon/gdm.c	(revision 5099)
+++ gdm-2.16.0/daemon/gdm.c	(revision 5100)
@@ -3087,10 +3087,14 @@
  
 	} else if (strncmp (msg, GDM_SUP_GET_SERVER_DETAILS " ",
 		     strlen (GDM_SUP_GET_SERVER_DETAILS " ")) == 0) {
-		const gchar *server = &msg[strlen (GDM_SUP_GET_SERVER_DETAILS " ")];
-		gchar   **splitstr = g_strsplit (server, " ", 2);
-		GdmXserver  *svr   = gdm_find_xserver ((gchar *)splitstr[0]);
+		const gchar  *server   = &msg[strlen (GDM_SUP_GET_SERVER_DETAILS " ")];
+		gchar       **splitstr = g_strsplit (server, " ", 2);
+		GdmXserver   *svr      = NULL;
 
+		if (splitstr != NULL && splitstr[0] != NULL) {
+			svr = gdm_find_xserver ((gchar *)splitstr[0]);
+		}
+
 		if (svr != NULL) {
 			if (g_strcasecmp (splitstr[1], "ID") == 0)
 			   gdm_connection_printf (conn, "OK %s\n", svr->id);
@@ -3126,12 +3130,11 @@
 			   gdm_connection_printf (conn, "OK false\n");
 			else
 			   gdm_connection_printf (conn, "ERROR 2 Key not valid\n");
-
-			g_strfreev (splitstr);
 		} else {
                		gdm_connection_printf (conn, "ERROR 1 Server not found\n");
 		}
  
+		g_strfreev (splitstr);
 	} else if (strcmp (msg, GDM_SUP_GREETERPIDS) == 0) {
 		GString *msg;
 		GSList *li;
@@ -3161,10 +3164,15 @@
 	} else if (strncmp (msg, GDM_SUP_GET_CONFIG " ",
 		     strlen (GDM_SUP_GET_CONFIG " ")) == 0) {
 		const gchar *parms = &msg[strlen (GDM_SUP_GET_CONFIG " ")];
-		gchar **splitstr = g_strsplit (parms, " ", 2);
-		gchar *retval = NULL;
+		gchar **splitstr   = g_strsplit (parms, " ", 2);
+		gchar *retval      = NULL;
 		static gboolean done_prefetch = FALSE;
 
+		if (splitstr == NULL || splitstr[0] == NULL) {
+               		gdm_connection_printf (conn, "ERROR 50 Unsupported key <null>\n");
+			return;
+		}
+		
 		/*
 		 * It is not meaningful to manage this in a per-display 
 		 * fashion since the prefetch program is only run once the
--- gdm-2.16.0/daemon/gdmconfig.c	(revision 5099)
+++ gdm-2.16.0/daemon/gdmconfig.c	(revision 5100)
@@ -816,9 +816,10 @@
 
    file = gdm_get_per_display_custom_config_file (display);
 
-   if (strcmp (ve_sure_string (splitstr[0]), "greeter") == 0 ||
-       strcmp (ve_sure_string (splitstr[0]), "gui") == 0 ||
-       is_key (key, GDM_KEY_PAM_STACK)) {
+   if (splitstr != NULL &&
+       (strcmp (ve_sure_string (splitstr[0]), "greeter") == 0 ||
+        strcmp (ve_sure_string (splitstr[0]), "gui") == 0 ||
+        is_key (key, GDM_KEY_PAM_STACK))) {
       gdm_config_key_to_string (file, key, retval);
    }
 
@@ -844,7 +845,7 @@
    *retval = NULL;
 
    /* Should not fail, all keys should have a category. */
-   if (splitstr[0] == NULL)
+   if (splitstr == NULL || splitstr[0] == NULL)
       return;
 
    /* If file doesn't exist, then just return */
@@ -1705,7 +1706,7 @@
    if (custom_cfg != NULL) {
        gchar **splitstr = g_strsplit (key, "/", 2);
 
-       if (splitstr[0] != NULL) {
+       if (splitstr != NULL && splitstr[0] != NULL) {
           GList *list = ve_config_get_keys (custom_cfg, splitstr[0]);
 
           while (list != NULL) {
@@ -1893,7 +1894,7 @@
       /* First check the custom file */
       if (cfgfiles->custom_cfg != NULL) {
           gchar **splitstr = g_strsplit (key_in, "/", 2);
-          if (splitstr[0] != NULL) {
+          if (splitstr != NULL && splitstr[0] != NULL) {
              GList *list = ve_config_get_keys (cfgfiles->custom_cfg, splitstr[0]);
 
              while (list != NULL) {