do not segv on executables that return non-zero.
authorGustavo Sverzut Barbieri <barbieri@gmail.com>
Tue, 9 Jun 2009 16:45:59 +0000 (16:45 +0000)
committerGustavo Sverzut Barbieri <barbieri@gmail.com>
Tue, 9 Jun 2009 16:45:59 +0000 (16:45 +0000)
if an executable returns non-zero a dialog will be present with
information, if it was a .desktop file, then it would use the "Name"
field to name the log and all.

However, the .desktop reference was deleted and the dialog would use a
bogus pointer. Now we take a reference insidethe dialog and just
release it on dialog deletion.

Found by manio, fix by me.

SVN revision: 40987

src/bin/e_exec.c

index bd58b9a..3ee31a3 100644 (file)
@@ -402,6 +402,7 @@ _e_exec_error_dialog(Efreet_Desktop *desktop, const char *exec, Ecore_Exe_Event_
        return;
      }
    cfdata->desktop = desktop;
+   if (cfdata->desktop) efreet_desktop_ref(cfdata->desktop);
    if (exec) cfdata->exec = strdup(exec);
    cfdata->error = error;
    cfdata->read = read;
@@ -508,6 +509,8 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
    if (cfdata->error) ecore_exe_event_data_free(cfdata->error);
    if (cfdata->read) ecore_exe_event_data_free(cfdata->read);
 
+   if (cfdata->desktop) efreet_desktop_free(cfdata->desktop);
+
    E_FREE(cfdata->exec);
    E_FREE(cfdata->signal);
    E_FREE(cfdata->exit);