summaryrefslogtreecommitdiff
path: root/src/clipboard.c
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2013-07-25 15:32:55 -0700
committerKristian Høgsberg <krh@bitplanet.net>2013-07-25 15:54:20 -0700
commit862814b2e66449859decc98693af6852a96458de (patch)
treedc71565f12ae6b035579f766528284fa5f0df16f /src/clipboard.c
parentce27841be55adcb4f9219a6296c01531a2b44ffb (diff)
downloadweston-862814b2e66449859decc98693af6852a96458de.tar.gz
clipboard: Handle OOM in clipboard_source_create()
Diffstat (limited to 'src/clipboard.c')
-rw-r--r--src/clipboard.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/clipboard.c b/src/clipboard.c
index 21a7e699..6f793f7b 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -134,6 +134,9 @@ clipboard_source_create(struct clipboard *clipboard,
char **s;
source = malloc(sizeof *source);
+ if (source == NULL)
+ return NULL;
+
wl_array_init(&source->contents);
wl_array_init(&source->base.mime_types);
source->base.resource = NULL;
@@ -146,13 +149,27 @@ clipboard_source_create(struct clipboard *clipboard,
source->serial = serial;
s = wl_array_add(&source->base.mime_types, sizeof *s);
+ if (s == NULL)
+ goto err_add;
*s = strdup(mime_type);
-
+ if (*s == NULL)
+ goto err_strdup;
source->event_source =
wl_event_loop_add_fd(loop, fd, WL_EVENT_READABLE,
clipboard_source_data, source);
+ if (source->event_source == NULL)
+ goto err_source;
return source;
+
+ err_source:
+ free(*s);
+ err_strdup:
+ wl_array_release(&source->base.mime_types);
+ err_add:
+ free(source);
+
+ return NULL;
}
struct clipboard_client {