From c9f8f8a7f46d3cc343f232441826a25e0e14347a Mon Sep 17 00:00:00 2001 From: "cpaul@redhat.com" Date: Tue, 5 Jan 2016 11:18:30 -0500 Subject: [PATCH] compositor: create_data_source(): Fix potential crash on OOM Noticed this while working on primary selection, in the event we run out of memory when trying to create a new data source, there's a chance we'll fail on wl_resource_create() and crash from source->resource being set to NULL. Signed-off-by: Lyude Reviewed-by: Marek Chalupa Reviewed-by: Bryce Harrington --- src/data-device.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/data-device.c b/src/data-device.c index d3ead5f9..54541b33 100644 --- a/src/data-device.c +++ b/src/data-device.c @@ -881,6 +881,14 @@ create_data_source(struct wl_client *client, return; } + source->resource = + wl_resource_create(client, &wl_data_source_interface, 1, id); + if (source->resource == NULL) { + free(source); + wl_resource_post_no_memory(resource); + return; + } + wl_signal_init(&source->destroy_signal); source->accept = client_source_accept; source->send = client_source_send; @@ -888,8 +896,6 @@ create_data_source(struct wl_client *client, wl_array_init(&source->mime_types); - source->resource = - wl_resource_create(client, &wl_data_source_interface, 1, id); wl_resource_set_implementation(source->resource, &data_source_interface, source, destroy_data_source); }