wayland-server: send error on invalid new object id
authorMathias Fiedler <mathias.fiedler@xse.de>
Wed, 18 Jul 2012 13:51:45 +0000 (15:51 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Sun, 22 Jul 2012 18:06:37 +0000 (14:06 -0400)
Creation of new client resources was silently ignored when
wl_client_add_resource() was used on server side and new object id was out
of range.

An error is now send out to the client in such case.

Also changed error message in wl_client_add_object, since
wl_map_insert_at() returns -1 only at invalid new id.

src/wayland-server.c

index df9bd07..3dc8416 100644 (file)
@@ -395,9 +395,12 @@ wl_client_add_resource(struct wl_client *client,
                resource->object.id =
                        wl_map_insert_new(&client->objects,
                                          WL_MAP_SERVER_SIDE, resource);
-       else
-               wl_map_insert_at(&client->objects,
-                                resource->object.id, resource);
+       else if (wl_map_insert_at(&client->objects,
+                                 resource->object.id, resource) < 0)
+               wl_resource_post_error(client->display_resource,
+                                      WL_DISPLAY_ERROR_INVALID_OBJECT,
+                                      "invalid new id %d",
+                                      resource->object.id);
 
        resource->client = client;
        wl_signal_init(&resource->destroy_signal);
@@ -1277,7 +1280,10 @@ wl_client_add_object(struct wl_client *client,
        wl_signal_init(&resource->destroy_signal);
 
        if (wl_map_insert_at(&client->objects, resource->object.id, resource) < 0) {
-               wl_resource_post_no_memory(client->display_resource);
+               wl_resource_post_error(client->display_resource,
+                                      WL_DISPLAY_ERROR_INVALID_OBJECT,
+                                      "invalid new id %d",
+                                      resource->object.id);
                free(resource);
                return NULL;
        }