mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 19:42:05 +00:00
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
This commit is contained in:
parent
658d97d00e
commit
1f570d542e
@ -106,8 +106,10 @@ meta_wayland_buffer_ensure_texture (MetaWaylandBuffer *buffer)
|
|||||||
|
|
||||||
if (!texture)
|
if (!texture)
|
||||||
{
|
{
|
||||||
|
meta_warning ("Could not import pending buffer, ignoring commit: %s\n",
|
||||||
|
catch_error->message);
|
||||||
cogl_error_free (catch_error);
|
cogl_error_free (catch_error);
|
||||||
meta_fatal ("Could not import pending buffer, ignoring commit\n");
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer->texture = texture;
|
buffer->texture = texture;
|
||||||
|
@ -735,6 +735,14 @@ apply_pending_state (MetaWaylandSurface *surface,
|
|||||||
CoglTexture *texture;
|
CoglTexture *texture;
|
||||||
|
|
||||||
texture = meta_wayland_buffer_ensure_texture (pending->buffer);
|
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,
|
meta_surface_actor_wayland_set_texture (surface_actor_wayland,
|
||||||
texture);
|
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
|
/* 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.
|
* be released if no-one else has a use-reference to it.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user