diff options
| author | Aleksandr Mezin <mezin.alexander@gmail.com> | 2022-02-09 05:36:11 +0600 |
|---|---|---|
| committer | Simon Ser <contact@emersion.fr> | 2022-03-25 09:43:53 +0000 |
| commit | 884d5fe3abc98c8b97f71974752ff9f9a3056e8e (patch) | |
| tree | 43cd9746ef1ca29607de6c8f50aec2f6125a4544 /src | |
| parent | util: set errno in wl_map_reserve_new() (diff) | |
| download | wayland-884d5fe3abc98c8b97f71974752ff9f9a3056e8e.tar wayland-884d5fe3abc98c8b97f71974752ff9f9a3056e8e.tar.gz wayland-884d5fe3abc98c8b97f71974752ff9f9a3056e8e.tar.bz2 wayland-884d5fe3abc98c8b97f71974752ff9f9a3056e8e.tar.lz wayland-884d5fe3abc98c8b97f71974752ff9f9a3056e8e.tar.xz wayland-884d5fe3abc98c8b97f71974752ff9f9a3056e8e.tar.zst wayland-884d5fe3abc98c8b97f71974752ff9f9a3056e8e.zip | |
util: set errno in wl_map_insert_at()
And add errno checks in callers, where it seems to be necessary.
Signed-off-by: Aleksandr Mezin <mezin.alexander@gmail.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/wayland-client.c | 5 | ||||
| -rw-r--r-- | src/wayland-server.c | 18 | ||||
| -rw-r--r-- | src/wayland-util.c | 4 |
3 files changed, 18 insertions, 9 deletions
diff --git a/src/wayland-client.c b/src/wayland-client.c index 6b0cf43..a9fb01e 100644 --- a/src/wayland-client.c +++ b/src/wayland-client.c @@ -485,7 +485,10 @@ wl_proxy_create_for_id(struct wl_proxy *factory, proxy->refcount = 1; proxy->version = factory->version; - wl_map_insert_at(&display->objects, 0, id, proxy); + if (wl_map_insert_at(&display->objects, 0, id, proxy) == -1) { + free(proxy); + return NULL; + } return proxy; } diff --git a/src/wayland-server.c b/src/wayland-server.c index 5edbc9c..9fc337b 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -1843,9 +1843,11 @@ wl_resource_create(struct wl_client *client, resource->dispatcher = NULL; if (wl_map_insert_at(&client->objects, 0, id, resource) < 0) { - wl_resource_post_error(client->display_resource, - WL_DISPLAY_ERROR_INVALID_OBJECT, - "invalid new id %d", id); + if (errno == EINVAL) { + wl_resource_post_error(client->display_resource, + WL_DISPLAY_ERROR_INVALID_OBJECT, + "invalid new id %d", id); + } free(resource); return NULL; } @@ -2240,10 +2242,12 @@ wl_client_add_resource(struct wl_client *client, WL_MAP_ENTRY_LEGACY, resource); } else if (wl_map_insert_at(&client->objects, WL_MAP_ENTRY_LEGACY, resource->object.id, resource) < 0) { - wl_resource_post_error(client->display_resource, - WL_DISPLAY_ERROR_INVALID_OBJECT, - "invalid new id %d", - resource->object.id); + if (errno == EINVAL) { + wl_resource_post_error(client->display_resource, + WL_DISPLAY_ERROR_INVALID_OBJECT, + "invalid new id %d", + resource->object.id); + } return 0; } diff --git a/src/wayland-util.c b/src/wayland-util.c index ee74bc1..e82b7d2 100644 --- a/src/wayland-util.c +++ b/src/wayland-util.c @@ -239,8 +239,10 @@ wl_map_insert_at(struct wl_map *map, uint32_t flags, uint32_t i, void *data) } count = entries->size / sizeof *start; - if (count < i) + if (count < i) { + errno = EINVAL; return -1; + } if (count == i) { if (!wl_array_add(entries, sizeof *start)) |
