compositor: fix two crashs on surface_attach() with null buffer
The condition to return from surface_attach with a null buffer involves es->output being non-null. However if a surface was just created this field would be null and an attach of a null buffer would cause the compositor to crash. The other crash happened if surface_attach was called twice with a null buffer after a valid buffer was attached to the surface. Since es->buffer was not being set to NULL, surface_attach() would call wl_list_remove(&es->buffer_destroy_listener.link) twice for the same surface. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
This commit is contained in:
parent
f856fd2f93
commit
b63e3e0201
|
@ -1151,6 +1151,9 @@ surface_attach(struct wl_client *client,
|
|||
struct weston_shell *shell = es->compositor->shell;
|
||||
struct wl_buffer *buffer;
|
||||
|
||||
if (!buffer_resource && !es->output)
|
||||
return;
|
||||
|
||||
weston_surface_damage_below(es);
|
||||
|
||||
if (es->buffer) {
|
||||
|
@ -1162,6 +1165,7 @@ surface_attach(struct wl_client *client,
|
|||
wl_list_remove(&es->link);
|
||||
es->visual = WESTON_NONE_VISUAL;
|
||||
es->output = NULL;
|
||||
es->buffer = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue