From 862814b2e66449859decc98693af6852a96458de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 25 Jul 2013 15:32:55 -0700 Subject: [PATCH] clipboard: Handle OOM in clipboard_source_create() --- src/clipboard.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 {