widget: Use the correct template in dispose_template()
authorAlexander Mikhaylenko <alexm@gnome.org>
Mon, 6 Mar 2023 01:36:16 +0000 (05:36 +0400)
committerAlexander Mikhaylenko <alexm@gnome.org>
Mon, 6 Mar 2023 01:37:53 +0000 (05:37 +0400)
In derivable classes, the widget's class can be different from the one
dispose_template() was called for, which can lead to failing the
template != NULL check at best, undefined behavior at worst.

Since we already pass the correct GType into the function, just use that
instead.

gtk/gtkwidget.c

index 21f666c601e409a5ee15b3c04220ec7c41bc4ae8..102d7851e654375c864177992a0bae17975716e6 100644 (file)
@@ -11128,7 +11128,8 @@ gtk_widget_dispose_template (GtkWidget *widget,
   g_return_if_fail (GTK_IS_WIDGET (widget));
   g_return_if_fail (g_type_name (widget_type) != NULL);
 
-  GtkWidgetTemplate *template = GTK_WIDGET_GET_CLASS (widget)->priv->template;
+  GObjectClass *object_class = g_type_class_peek (widget_type);
+  GtkWidgetTemplate *template = GTK_WIDGET_CLASS (object_class)->priv->template;
   g_return_if_fail (template != NULL);
 
   /* Tear down the automatic child data */