From 842a36ae4aca93bc610a25c3ccd3141df8bc4a80 Mon Sep 17 00:00:00 2001 From: Hardening Date: Tue, 18 Mar 2014 14:12:50 +0100 Subject: [PATCH] Check return value of wl_cursor functions This patch adds checks for themes and cursors returned by wl_cursor functions. Reviewed-by: Bryce Harrington --- clients/simple-egl.c | 10 ++++++++++ clients/window.c | 4 ++++ src/compositor-wayland.c | 7 ++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/clients/simple-egl.c b/clients/simple-egl.c index a6deff6b..410e3ab7 100644 --- a/clients/simple-egl.c +++ b/clients/simple-egl.c @@ -501,6 +501,8 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer, else if (cursor) { image = display->default_cursor->images[0]; buffer = wl_cursor_image_get_buffer(image); + if (!buffer) + return; wl_pointer_set_cursor(pointer, serial, display->cursor_surface, image->hotspot_x, @@ -715,8 +717,16 @@ registry_handle_global(void *data, struct wl_registry *registry, d->shm = wl_registry_bind(registry, name, &wl_shm_interface, 1); d->cursor_theme = wl_cursor_theme_load(NULL, 32, d->shm); + if (!d->cursor_theme) { + fprintf(stderr, "unable to load default theme\n"); + return; + } d->default_cursor = wl_cursor_theme_get_cursor(d->cursor_theme, "left_ptr"); + if (!d->default_cursor) { + fprintf(stderr, "unable to load default left pointer\n"); + // TODO: abort ? + } } } diff --git a/clients/window.c b/clients/window.c index 4d40e167..5ba73227 100644 --- a/clients/window.c +++ b/clients/window.c @@ -1279,6 +1279,10 @@ create_cursors(struct display *display) weston_config_destroy(config); display->cursor_theme = wl_cursor_theme_load(theme, size, display->shm); + if (!display->cursor_theme) { + fprintf(stderr, "could not load theme '%s'\n", theme); + return; + } free(theme); display->cursors = xmalloc(ARRAY_LENGTH(cursors) * sizeof display->cursors[0]); diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c index 238946b2..7d9e01b0 100644 --- a/src/compositor-wayland.c +++ b/src/compositor-wayland.c @@ -968,7 +968,8 @@ input_set_cursor(struct wayland_input *input) image = input->compositor->cursor->images[0]; buffer = wl_cursor_image_get_buffer(image); - + if (!buffer) + return; wl_pointer_set_cursor(input->parent.pointer, input->enter_serial, input->parent.cursor.surface, @@ -1428,6 +1429,10 @@ create_cursor(struct wayland_compositor *c, struct weston_config *config) weston_config_section_get_int(s, "cursor-size", &size, 32); c->cursor_theme = wl_cursor_theme_load(theme, size, c->parent.shm); + if (!c->cursor_theme) { + fprintf(stderr, "could not load cursor theme\n"); + return; + } free(theme);