[PATCH] Add error handling for wl_cursors

Hardening rdp.effort at gmail.com
Tue Mar 18 03:29:00 PDT 2014


This patch adds some error management in wayland cursors
---
 cursor/wayland-cursor.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/cursor/wayland-cursor.c b/cursor/wayland-cursor.c
index b16f530..dba3b51 100644
--- a/cursor/wayland-cursor.c
+++ b/cursor/wayland-cursor.c
@@ -94,6 +94,8 @@ shm_pool_resize(struct shm_pool *pool, int size)
 
 	pool->data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
 			  pool->fd, 0);
+	if (pool->data == (void *)-1)
+		return 0;
 	pool->size = size;
 
 	return 1;
@@ -391,17 +393,15 @@ wl_cursor_theme_load(const char *name, int size, struct wl_shm *shm)
 		name = "default";
 
 	theme->name = strdup(name);
+	if (!theme->name)
+		goto out_error_name;
 	theme->size = size;
 	theme->cursor_count = 0;
 	theme->cursors = NULL;
 
-	theme->pool =
-		shm_pool_create(shm, size * size * 4);
-	if (!theme->pool) {
-		free(theme->name);
-		free(theme);
-		return NULL;
-	}
+	theme->pool = shm_pool_create(shm, size * size * 4);
+	if (!theme->pool)
+		goto out_error_pool;
 
 	xcursor_load_theme(name, size, load_callback, theme);
 
@@ -409,6 +409,12 @@ wl_cursor_theme_load(const char *name, int size, struct wl_shm *shm)
 		load_default_theme(theme);
 
 	return theme;
+
+out_error_pool:
+	free(theme->name);
+out_error_name:
+	free(theme);
+	return NULL;
 }
 
 /** Destroys a cursor theme object
-- 
1.8.1.2



More information about the wayland-devel mailing list