[mutter] compositor: Guard against untimely calls
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] compositor: Guard against untimely calls
- Date: Mon, 11 Nov 2019 13:23:38 +0000 (UTC)
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]