clipboard: Handle OOM in clipboard_source_create()
authorKristian Høgsberg <krh@bitplanet.net>
Thu, 25 Jul 2013 22:32:55 +0000 (15:32 -0700)
committerKristian Høgsberg <krh@bitplanet.net>
Thu, 25 Jul 2013 22:54:20 +0000 (15:54 -0700)
src/clipboard.c

index 21a7e69..6f793f7 100644 (file)
@@ -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 {