util: set errno when hitting WL_MAP_MAX_OBJECTS
authorSimon Ser <contact@emersion.fr>
Tue, 28 Jun 2022 09:59:26 +0000 (11:59 +0200)
committerSimon Ser <contact@emersion.fr>
Tue, 28 Jun 2022 09:59:26 +0000 (11:59 +0200)
Callers may check errno when wl_map_insert_* functions return an
error (since [1]). Make sure it's always set to a meaningful value
when returning an error, otherwise callers might end up checking an
errno coming from a completely different function.

[1]: https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/205

Signed-off-by: Simon Ser <contact@emersion.fr>
Fixes: b19488c7154b ("util: Limit size of wl_map")

src/wayland-util.c

index 41f0986..bb2a183 100644 (file)
@@ -232,6 +232,7 @@ wl_map_insert_new(struct wl_map *map, uint32_t flags, void *data)
                 * better make it a NULL so wl_map_for_each doesn't
                 * dereference it later. */
                entry->data = NULL;
+               errno = ENOSPC;
                return 0;
        }
        entry->data = data;
@@ -254,8 +255,10 @@ wl_map_insert_at(struct wl_map *map, uint32_t flags, uint32_t i, void *data)
                i -= WL_SERVER_ID_START;
        }
 
-       if (i > WL_MAP_MAX_OBJECTS)
+       if (i > WL_MAP_MAX_OBJECTS) {
+               errno = ENOSPC;
                return -1;
+       }
 
        count = entries->size / sizeof *start;
        if (count < i) {
@@ -299,8 +302,10 @@ wl_map_reserve_new(struct wl_map *map, uint32_t i)
                i -= WL_SERVER_ID_START;
        }
 
-       if (i > WL_MAP_MAX_OBJECTS)
+       if (i > WL_MAP_MAX_OBJECTS) {
+               errno = ENOSPC;
                return -1;
+       }
 
        count = entries->size / sizeof *start;
        if (count < i) {