summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcpaul@redhat.com <cpaul@redhat.com>2016-01-05 11:18:30 -0500
committerBryce Harrington <bryce@osg.samsung.com>2016-01-13 14:44:13 -0800
commitc9f8f8a7f46d3cc343f232441826a25e0e14347a (patch)
tree4452b79aaeb3679769ba9f5263a18c338cf8dcf3
parent89324ce88820656a85f16e1c94791412d451b7ba (diff)
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 <cpaul@redhat.com> Reviewed-by: Marek Chalupa <mchqwerty@gmail.com> Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
-rw-r--r--src/data-device.c10
1 files 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);
}