From: Aleksandr Mezin Date: Wed, 9 Feb 2022 00:26:18 +0000 (+0600) Subject: client, server: handle wl_map_insert_new() failures X-Git-Tag: 1.20.91~34 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=79c84ed3f132fd6bc01c2f62a8477d8d1a462b67;p=platform%2Fupstream%2Fwayland.git client, server: handle wl_map_insert_new() failures Signed-off-by: Aleksandr Mezin --- diff --git a/src/wayland-client.c b/src/wayland-client.c index a9fb01e..75692e6 100644 --- a/src/wayland-client.c +++ b/src/wayland-client.c @@ -430,6 +430,10 @@ proxy_create(struct wl_proxy *factory, const struct wl_interface *interface, proxy->version = version; proxy->object.id = wl_map_insert_new(&display->objects, 0, proxy); + if (proxy->object.id == 0) { + free(proxy); + return NULL; + } return proxy; } @@ -1158,11 +1162,16 @@ wl_display_connect_to_fd(int fd) pthread_cond_init(&display->reader_cond, NULL); display->reader_count = 0; - wl_map_insert_new(&display->objects, 0, NULL); + if (wl_map_insert_at(&display->objects, 0, 0, NULL) == -1) + goto err_connection; - display->proxy.object.interface = &wl_display_interface; display->proxy.object.id = wl_map_insert_new(&display->objects, 0, display); + + if (display->proxy.object.id == 0) + goto err_connection; + + display->proxy.object.interface = &wl_display_interface; display->proxy.display = display; display->proxy.object.implementation = (void(**)(void)) &display_listener; display->proxy.user_data = display; diff --git a/src/wayland-server.c b/src/wayland-server.c index 9fc337b..a503452 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -1826,8 +1826,13 @@ wl_resource_create(struct wl_client *client, if (resource == NULL) return NULL; - if (id == 0) + if (id == 0) { id = wl_map_insert_new(&client->objects, 0, NULL); + if (id == 0) { + free(resource); + return NULL; + } + } resource->object.id = id; resource->object.interface = interface; @@ -2240,6 +2245,8 @@ wl_client_add_resource(struct wl_client *client, resource->object.id = wl_map_insert_new(&client->objects, WL_MAP_ENTRY_LEGACY, resource); + if (resource->object.id == 0) + return 0; } else if (wl_map_insert_at(&client->objects, WL_MAP_ENTRY_LEGACY, resource->object.id, resource) < 0) { if (errno == EINVAL) {