wayland-server: return new ID in wl_client_add_resource()
authorDavid Herrmann <dh.herrmann@googlemail.com>
Mon, 10 Sep 2012 09:20:35 +0000 (11:20 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 11 Sep 2012 01:44:47 +0000 (21:44 -0400)
commit9fe135c46f2457d6dc694e4c02d2defeab6986b0
tree4f05dc916c00791e77ab69eb00eb1181c4e5f595
parent397a0c6ada56e4330ebf2bc662010ca8d32a2c73
wayland-server: return new ID in wl_client_add_resource()

wl_client_add_resource() used to return no error even though the new
resource wasn't added to the client. This currently makes it very easy to
DOS weston by simply posting thousands of "create_surface" requests with
an invalid ID. Weston simply assumes the wl_client_add_resource() request
succeeds but will never destroy the surface again as the "destroy" signal
is never called (because the surface isn't linked into the wl_map).

This change makes wl_client_add_resource() return the new ID of the added
object and 0 on failure. Servers (like weston) can now correctly
immediately destroy the surface when this call fails instead of leaving
the surface around and producing memory-leaks.

Instead of returning -1 on failure and 0 on success, I made it return the
new ID as this seems more appropriate. We can directly use it when calling
it with new_id==0.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/wayland-server.c
src/wayland-server.h