[mutter] compositor: Guard against untimely calls



commit 7193938d27d7ad5303e1acc016530dda1c3692b0
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Sat Nov 9 23:26:00 2019 +0100

    compositor: Guard against untimely calls
    
    It seems that sometimes these functions are called by Javascript in
    GNOME Shell during tear down. This causes segfaults and crash reports,
    but without any backtraces other than the entry and exit points into
    gjs.
    
    In order to get more useful information about where these calls come
    from, validate the input passed gracefully, by complaining in the log
    and returning NULL values.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/926

 src/compositor/compositor.c | 55 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 40 insertions(+), 15 deletions(-)
---
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 30a7a3824..f6734da2d 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -210,9 +210,14 @@ get_compositor_for_display (MetaDisplay *display)
 ClutterActor *
 meta_get_stage_for_display (MetaDisplay *display)
 {
-  MetaCompositor *compositor = get_compositor_for_display (display);
-  MetaCompositorPrivate *priv =
-    meta_compositor_get_instance_private (compositor);
+  MetaCompositor *compositor;
+  MetaCompositorPrivate *priv;
+
+  g_return_val_if_fail (display, NULL);
+
+  compositor = get_compositor_for_display (display);
+  g_return_val_if_fail (compositor, NULL);
+  priv = meta_compositor_get_instance_private (compositor);
 
   return priv->stage;
 }
@@ -226,9 +231,14 @@ meta_get_stage_for_display (MetaDisplay *display)
 ClutterActor *
 meta_get_window_group_for_display (MetaDisplay *display)
 {
-  MetaCompositor *compositor = get_compositor_for_display (display);
-  MetaCompositorPrivate *priv =
-    meta_compositor_get_instance_private (compositor);
+  MetaCompositor *compositor;
+  MetaCompositorPrivate *priv;
+
+  g_return_val_if_fail (display, NULL);
+
+  compositor = get_compositor_for_display (display);
+  g_return_val_if_fail (compositor, NULL);
+  priv = meta_compositor_get_instance_private (compositor);
 
   return priv->window_group;
 }
@@ -242,9 +252,14 @@ meta_get_window_group_for_display (MetaDisplay *display)
 ClutterActor *
 meta_get_top_window_group_for_display (MetaDisplay *display)
 {
-  MetaCompositor *compositor = get_compositor_for_display (display);
-  MetaCompositorPrivate *priv =
-    meta_compositor_get_instance_private (compositor);
+  MetaCompositor *compositor;
+  MetaCompositorPrivate *priv;
+
+  g_return_val_if_fail (display, NULL);
+
+  compositor = get_compositor_for_display (display);
+  g_return_val_if_fail (compositor, NULL);
+  priv = meta_compositor_get_instance_private (compositor);
 
   return priv->top_window_group;
 }
@@ -258,9 +273,14 @@ meta_get_top_window_group_for_display (MetaDisplay *display)
 ClutterActor *
 meta_get_feedback_group_for_display (MetaDisplay *display)
 {
-  MetaCompositor *compositor = get_compositor_for_display (display);
-  MetaCompositorPrivate *priv =
-    meta_compositor_get_instance_private (compositor);
+  MetaCompositor *compositor;
+  MetaCompositorPrivate *priv;
+
+  g_return_val_if_fail (display, NULL);
+
+  compositor = get_compositor_for_display (display);
+  g_return_val_if_fail (compositor, NULL);
+  priv = meta_compositor_get_instance_private (compositor);
 
   return priv->feedback_group;
 }
@@ -274,9 +294,14 @@ meta_get_feedback_group_for_display (MetaDisplay *display)
 GList *
 meta_get_window_actors (MetaDisplay *display)
 {
-  MetaCompositor *compositor = get_compositor_for_display (display);
-  MetaCompositorPrivate *priv =
-    meta_compositor_get_instance_private (compositor);
+  MetaCompositor *compositor;
+  MetaCompositorPrivate *priv;
+
+  g_return_val_if_fail (display, NULL);
+
+  compositor = get_compositor_for_display (display);
+  g_return_val_if_fail (compositor, NULL);
+  priv = meta_compositor_get_instance_private (compositor);
 
   return priv->windows;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]