diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2013-07-25 15:32:55 -0700 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-07-25 15:54:20 -0700 |
commit | 862814b2e66449859decc98693af6852a96458de (patch) | |
tree | dc71565f12ae6b035579f766528284fa5f0df16f /src/clipboard.c | |
parent | ce27841be55adcb4f9219a6296c01531a2b44ffb (diff) | |
download | weston-862814b2e66449859decc98693af6852a96458de.tar.gz |
clipboard: Handle OOM in clipboard_source_create()
Diffstat (limited to 'src/clipboard.c')
-rw-r--r-- | src/clipboard.c | 19 |
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 { |