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:
Asher Gordon
2019-12-24 00:44:30 -05:00
committed by Simon Tatham
parent 1c0c49dd5c
commit ce69911077

19
gtk.c
View File

@ -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;
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),
"program-name", thegame.name,
"version", ver,
"comments", "Part of Simon Tatham's Portable Puzzle Collection",
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];