Package: gtk-theme-switch Version: 2.0.5 Severity: normal Tags: patch Hi,
There is currently an unchecked fopen() in switch2.c. In fact all has began when i made a small audit in the code, a getenv() was interesting. If you change the HOME shell variable to something that doesn't exist, then it crashes. Try it : HOME="EvilPlace" gtk-switch-theme2 And then apply a theme :) A gdb later, i've realized that in fact fopen() in write_rc wasn't checked for success. If the user can't write in ~/.gtkrc-2.0 (and the temp file used for preview) it crashes too. I join a patch that spawns a small message box to alert the user and quits properly, since anyway the program is unusable under this condition. Regards, François. -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686) Kernel: Linux 2.6.26-1-686 (SMP w/1 CPU core) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages gtk-theme-switch depends on: ii libatk1.0-0 1.22.0-1 The ATK accessibility toolkit ii libc6 2.7-13 GNU C Library: Shared libraries ii libcairo2 1.6.4-6 The Cairo 2D vector graphics libra ii libglib2.0-0 2.16.5-1 The GLib library of C routines ii libgtk2.0-0 2.12.11-3 The GTK+ graphical user interface ii libpango1.0-0 1.20.5-1 Layout and rendering of internatio gtk-theme-switch recommends no packages. gtk-theme-switch suggests no packages. -- no debconf information
--- switch2.orig.c 2005-05-01 02:28:32.000000000 +0200 +++ switch2.c 2008-09-10 05:57:10.000000000 +0200 @@ -9,7 +9,7 @@ #include "switch.h" #define INIT_GTK if (!using_gtk) { gtk_init (&argc, &argv); using_gtk = 1; } - +#include <errno.h> /* globals */ GHashTable *hash; GList *glist=NULL; @@ -220,6 +220,19 @@ write_rc_file (gchar *include_file, gchar *path) { FILE *gtkrc = fopen(path, "w"); + /*XXX XXX*/ + if (gtkrc == NULL) { + GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(dockwin), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + "Unable to save your preferences to %s: %s.", + path,strerror(errno) ); + gtk_window_set_title(GTK_WINDOW(dialog), "Error"); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + quit(); + } /* the caps stuff is bullshit for gnome */ fprintf(gtkrc, "# -- THEME AUTO-WRITTEN DO NOT EDIT\ninclude \"%s\"\n\n", include_file); if (newfont)