compositor: create_data_source(): Fix potential crash on OOM
authorcpaul@redhat.com <cpaul@redhat.com>
Tue, 5 Jan 2016 16:18:30 +0000 (11:18 -0500)
committerBryce Harrington <bryce@osg.samsung.com>
Wed, 13 Jan 2016 22:44:13 +0000 (14:44 -0800)
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 <cpaul@redhat.com>
Reviewed-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
src/data-device.c

index d3ead5f..54541b3 100644 (file)
@@ -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);
 }