[mutter] wayland: Survive an unsupported buffer size
- From: Olivier Fourdan <ofourdan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland: Survive an unsupported buffer size
- Date: Fri, 26 Aug 2016 09:16:37 +0000 (UTC)
commit 1f570d542ee7d703cf9f272183115f9df0a92b8c
Author: Olivier Fourdan <ofourdan redhat com>
Date: Fri Aug 26 09:41:59 2016 +0200
wayland: Survive an unsupported buffer size
If cogl fails to create a texture from the client's given buffer,
mutter would raise a fatal error and terminate.
As a result, a broken client might kill gnome-shell/mutter and take the
entire Wayland session with it.
Instead of raising a fatal error in this case, log the cogl error
message and send the client an OOM error, so mutter/gnome-shell can
survive an unsupported buffer size.
https://bugzilla.gnome.org/show_bug.cgi?id=770387
src/wayland/meta-wayland-buffer.c | 4 +++-
src/wayland/meta-wayland-surface.c | 9 +++++++++
2 files changed, 12 insertions(+), 1 deletions(-)
---
diff --git a/src/wayland/meta-wayland-buffer.c b/src/wayland/meta-wayland-buffer.c
index 8c41e81..b23ca35 100644
--- a/src/wayland/meta-wayland-buffer.c
+++ b/src/wayland/meta-wayland-buffer.c
@@ -106,8 +106,10 @@ meta_wayland_buffer_ensure_texture (MetaWaylandBuffer *buffer)
if (!texture)
{
+ meta_warning ("Could not import pending buffer, ignoring commit: %s\n",
+ catch_error->message);
cogl_error_free (catch_error);
- meta_fatal ("Could not import pending buffer, ignoring commit\n");
+ goto out;
}
buffer->texture = texture;
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 031229d..ffa6e2e 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -735,6 +735,14 @@ apply_pending_state (MetaWaylandSurface *surface,
CoglTexture *texture;
texture = meta_wayland_buffer_ensure_texture (pending->buffer);
+ if (!texture)
+ {
+ wl_resource_post_error (surface->resource, WL_DISPLAY_ERROR_NO_MEMORY,
+ "Failed to create a texture for surface %i",
+ wl_resource_get_id (surface->resource));
+
+ goto cleanup;
+ }
meta_surface_actor_wayland_set_texture (surface_actor_wayland,
texture);
}
@@ -804,6 +812,7 @@ apply_pending_state (MetaWaylandSurface *surface,
}
}
+cleanup:
/* If we have a buffer that we are not using, decrease the use count so it may
* be released if no-one else has a use-reference to it.
*/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]