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;
|
frontend *fe = (frontend *)data;
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(3,0,0)
|
#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 char *const *const xpm_icons[];
|
||||||
extern const int n_xpm_icons;
|
extern const int n_xpm_icons;
|
||||||
GdkPixbuf *icon = gdk_pixbuf_new_from_xpm_data
|
|
||||||
((const gchar **)xpm_icons[n_xpm_icons-1]);
|
if (n_xpm_icons) {
|
||||||
gtk_show_about_dialog
|
GdkPixbuf *icon = gdk_pixbuf_new_from_xpm_data
|
||||||
(GTK_WINDOW(fe->window),
|
((const gchar **)xpm_icons[n_xpm_icons-1]);
|
||||||
"program-name", thegame.name,
|
|
||||||
"version", ver,
|
gtk_show_about_dialog
|
||||||
"comments", "Part of Simon Tatham's Portable Puzzle Collection",
|
(GTK_WINDOW(fe->window),
|
||||||
"logo", icon,
|
ABOUT_PARAMS,
|
||||||
(const gchar *)NULL);
|
"logo", icon,
|
||||||
g_object_unref(G_OBJECT(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
|
#else
|
||||||
char titlebuf[256];
|
char titlebuf[256];
|
||||||
char textbuf[1024];
|
char textbuf[1024];
|
||||||
|
Reference in New Issue
Block a user