[PATCH wayland 2/2] cursor: fix some leaks

Pekka Paalanen ppaalanen at gmail.com
Mon Jul 9 03:34:35 PDT 2012


- don't leak memory in shm_pool_create() on failure
- don't leak fd in shm_pool_destroy()
- return NULL from wl_cursor_theme_load() if pool fails

Tha last one fixes a segfault, when shm_pool_create() has failed.

Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
---
 cursor/wayland-cursor.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/cursor/wayland-cursor.c b/cursor/wayland-cursor.c
index 1a312b0..bd9dfc7 100644
--- a/cursor/wayland-cursor.c
+++ b/cursor/wayland-cursor.c
@@ -49,14 +49,17 @@ shm_pool_create(struct wl_shm *shm, int size)
 		return NULL;
 
 	pool->fd = os_create_anonymous_file(size);
-	if (pool->fd < 0)
+	if (pool->fd < 0) {
+		free(pool);
 		return NULL;
+	}
 
 	pool->data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
 			  pool->fd, 0);
 
 	if (pool->data == MAP_FAILED) {
 		close(pool->fd);
+		free(pool);
 		return NULL;
 	}
 
@@ -104,6 +107,7 @@ shm_pool_destroy(struct shm_pool *pool)
 {
 	munmap(pool->data, pool->size);
 	wl_shm_pool_destroy(pool->pool);
+	close(pool->fd);
 	free(pool);
 }
 
@@ -277,6 +281,11 @@ wl_cursor_theme_load(const char *name, int size, struct wl_shm *shm)
 
 	theme->pool =
 		shm_pool_create(shm, size * size * 4);
+	if (!theme->pool) {
+		free(theme->name);
+		free(theme);
+		return NULL;
+	}
 
 	xcursor_load_theme(name, size, load_callback, theme);
 
-- 
1.7.8.6



More information about the wayland-devel mailing list