From 1d8bac64b2fb833fad9d3d9746c35e62e851e76b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 31 Jan 2011 11:32:19 -0500 Subject: [PATCH] Fix a segfault in gtk_statusbar_remove_all https://bugzilla.gnome.org/show_bug.cgi?id=640487 --- gtk/gtkstatusbar.c | 5 ++++- gtk/tests/testing.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c index 3edecbe3a7..74b32571c6 100644 --- a/gtk/gtkstatusbar.c +++ b/gtk/gtkstatusbar.c @@ -518,7 +518,10 @@ gtk_statusbar_remove_all (GtkStatusbar *statusbar, if (prev == NULL) prev = statusbar->messages; - list = prev->next; + if (prev) + list = prev->next; + else + list = NULL; } else { diff --git a/gtk/tests/testing.c b/gtk/tests/testing.c index 40c7a021ed..43ee25f5c7 100644 --- a/gtk/tests/testing.c +++ b/gtk/tests/testing.c @@ -216,17 +216,38 @@ test_spin_button_arrows (void) g_assert (oldval == 0); } +static void +test_statusbar_remove_all (void) +{ + GtkWidget *statusbar; + + g_test_bug ("640487"); + + statusbar = gtk_statusbar_new (); + g_object_ref_sink (statusbar); + + gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla"); + gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla"); + gtk_statusbar_remove_all (GTK_STATUSBAR (statusbar), 1); + + g_object_unref (statusbar); +} + int main (int argc, char *argv[]) { gtk_test_init (&argc, &argv); + g_test_bug_base ("http://bugzilla.gnome.org/"); gtk_test_register_all_types(); + + g_test_add_func ("/tests/statusbar-remove-all", test_statusbar_remove_all); g_test_add_func ("/ui-tests/text-access", test_text_access); g_test_add_func ("/ui-tests/button-clicks", test_button_clicks); g_test_add_func ("/ui-tests/keys-events", test_button_keys); g_test_add_func ("/ui-tests/slider-ranges", test_slider_ranges); g_test_add_func ("/ui-tests/xserver-sync", test_xserver_sync); g_test_add_func ("/ui-tests/spin-button-arrows", test_spin_button_arrows); + return g_test_run(); }