[PATCH] double free bug

Ludwig Nussel ludwig.nussel at gmx.de
Wed Nov 17 13:08:48 EST 2004


Hi,

A double free bug and a small memleak slipped in:

Index: loki_setup/install.c
===================================================================
--- loki_setup.orig/install.c
+++ loki_setup/install.c
@@ -359,12 +359,10 @@ int GetProductPromptOverwrite(install_in
 static char check_deviant_paths(xmlNodePtr node, install_info *info, char* path_ret)
 {
     while ( node ) {
-        char *wanted;
         char *orig_dpath;
 		const char *dpath;
 
-        wanted = xmlGetProp(node, "install");
-        if ( wanted  && (strcmp(wanted, "true") == 0) ) {
+        if ( xmlNodePropIsTrue(node, "install") ) {
             xmlNodePtr elements = node->childs;
             while ( elements ) {
                 dpath = orig_dpath = xmlGetProp(elements, "path");
@@ -376,9 +374,9 @@ static char check_deviant_paths(xmlNodeP
 					if ( path_up[0] != '/' ) { /* Not an absolute path */
 						char buf[PATH_MAX];
 						snprintf(buf, PATH_MAX, "%s/%s", info->install_path, path_up);
-						xmlFree(orig_dpath);
 						if (!dir_is_accessible(buf))
 						{
+							xmlFree(orig_dpath);
 							if(path_ret) strcpy(path_ret, buf);
 							return 1;
 						}
@@ -394,7 +392,6 @@ static char check_deviant_paths(xmlNodeP
             if (check_deviant_paths(node->childs, info, path_ret))
                 return 1;
         }
-		xmlFree(wanted);
         node = node->next;
     }
     return 0;


Prevent NULL deref when you want to debug the issue above and the
glade file cannot be loaded :-):

Index: loki_setup/gtk_ui.c
===================================================================
--- loki_setup.orig/gtk_ui.c
+++ loki_setup/gtk_ui.c
@@ -1465,6 +1465,7 @@ static install_state gtkui_init(install_
     /* Glade segfaults if the file can't be read */
     opened = fopen(glade_file, "r");
     if ( opened == NULL ) {
+        fprintf(stderr, _("Unable to open %s, aborting!\n"), glade_file);
         return SETUP_ABORT;
     }
     fclose(opened);
@@ -1860,7 +1861,7 @@ static void gtkui_abort(install_info *in
 
 	/* No point in waiting for a change of state if the window is not there */
 	w = glade_xml_get_widget(setup_glade, "setup_window");
-	if ( ! GTK_WIDGET_VISIBLE(w) )
+	if ( !w || ! GTK_WIDGET_VISIBLE(w) )
 		return;
 
     if ( setup_glade ) {

cu
Ludwig

-- 
(o_  Ludwig.Nussel at gmx.de
//\
V_/_ PGP Key ID: FF8135CE
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://icculus.org/pipermail/lokisetup/attachments/20041117/97006c17/attachment.pgp>


More information about the Lokisetup mailing list