[PATCH] wayland-client: Initialize newly created wl_proxys to zero.

Nils Chr. Brause nilschrbrause at gmail.com
Sun Aug 10 06:59:08 PDT 2014


On Sat, Aug 9, 2014 at 3:14 PM, Pekka Paalanen <ppaalanen at gmail.com> wrote:

> I see nothing wrong here, memset to zero is a usual pattern, and
> wl_proxy is a complex enough type, that checking every member is
> set is tedious. Therefore:
>
> Reviewed-by: Pekka Paalanen <ppaalanen at gmail.com>
>

Thanks!


> But I do wonder, if it ever makes sense to check user data for
> NULL, and set if it is NULL. If user_data is NULL, how can you
> ever be sure, that the wl_proxy was created by your code, and not
> by some library you use?
>
> Even when user_data is not NULL, you should have some explicit way
> of checking whether the pointer is yours or not.
>

If I would use any external libraries (like Qt or something), I agree that I
could not possibly trust the value of user_data, since I don't know, what
the library is doing there.

But I'm not using any external libraries, just libwayland-client. I thought
that all proxies that are created by marshal_constructor or come from
events with new_id type arguments are created by either of these two
functions and therefore would have a NULL user_data if they got
initialised there. If this is wrong, please tell me. :)


> An example: you use a library and you passed the wl_display to it.
> This library goes and creates a wl_surface of its own. This
> wl_surface gets targeted by input, so your client receives e.g.
> wl_pointer.enter. In the wl_pointer.enter handler, you now suddenly
> have a wl_proxy for a wl_surface that you did not create, and
> therefore the user_data is nothing you would expect. If you are
> lucky, your program crashes here.
>
> The problems emerges in all event handlers, where the event carries
> an object as an argument.
>
>
> Thanks,
> pq
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140810/dc4e09ff/attachment.html>


More information about the wayland-devel mailing list