mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Don't segfault when no icons are available.
When no icons are available, n_xpm_icons will be 0, and menu_about_event() will try to access xpm_icons[n_xpm_icons-1]. Since n_xpm_icons is 0, this becomes xpm_icons[-1] which is an invalid value, causing a segfault. Instead, check if n_xpm_icons is 0, and if so, don't pass any icon to gtk_show_about_dialog().
This commit is contained in:

committed by
Simon Tatham

parent
1c0c49dd5c
commit
ce69911077
33
gtk.c
33
gtk.c
@ -2395,18 +2395,31 @@ static void menu_about_event(GtkMenuItem *menuitem, gpointer data)
|
||||
frontend *fe = (frontend *)data;
|
||||
|
||||
#if GTK_CHECK_VERSION(3,0,0)
|
||||
# define ABOUT_PARAMS \
|
||||
"program-name", thegame.name, \
|
||||
"version", ver, \
|
||||
"comments", "Part of Simon Tatham's Portable Puzzle Collection"
|
||||
|
||||
extern char *const *const xpm_icons[];
|
||||
extern const int n_xpm_icons;
|
||||
GdkPixbuf *icon = gdk_pixbuf_new_from_xpm_data
|
||||
((const gchar **)xpm_icons[n_xpm_icons-1]);
|
||||
gtk_show_about_dialog
|
||||
(GTK_WINDOW(fe->window),
|
||||
"program-name", thegame.name,
|
||||
"version", ver,
|
||||
"comments", "Part of Simon Tatham's Portable Puzzle Collection",
|
||||
"logo", icon,
|
||||
(const gchar *)NULL);
|
||||
g_object_unref(G_OBJECT(icon));
|
||||
|
||||
if (n_xpm_icons) {
|
||||
GdkPixbuf *icon = gdk_pixbuf_new_from_xpm_data
|
||||
((const gchar **)xpm_icons[n_xpm_icons-1]);
|
||||
|
||||
gtk_show_about_dialog
|
||||
(GTK_WINDOW(fe->window),
|
||||
ABOUT_PARAMS,
|
||||
"logo", icon,
|
||||
(const gchar *)NULL);
|
||||
g_object_unref(G_OBJECT(icon));
|
||||
}
|
||||
else {
|
||||
gtk_show_about_dialog
|
||||
(GTK_WINDOW(fe->window),
|
||||
ABOUT_PARAMS,
|
||||
(const gchar *)NULL);
|
||||
}
|
||||
#else
|
||||
char titlebuf[256];
|
||||
char textbuf[1024];
|
||||
|
Reference in New Issue
Block a user