On 03/09/2012 11:41 AM, Pekka Paalanen wrote:
On Fri, 9 Mar 2012 11:18:49 +0200
Ander Conselvan de Oliveira<[email protected]>
wrote:
The buffer used by wl_connection_data to receive a cmsg is 128 bytes
long. This can hold at most 28 fds but when a cmsg is generated for
sending the fds, there is no check for this limitation. The man page
for recvmsg does not show any way of recovering from MSG_CTRUNC, that
happens when the buffer supplied for cmsg is too short.
Fix this by forcing that to be written if we would generate a buffer
longer than the maximum.
---
src/connection.c | 23 +++++++++++++++++++----
1 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/src/connection.c b/src/connection.c
index 1ea2418..30a99c0 100644
--- a/src/connection.c
+++ b/src/connection.c
[...]
@@ -389,6 +393,18 @@ wl_message_size_extra(const struct wl_message *message)
return extra;
}
+static void
+wl_connection_put_fd(struct wl_connection *connection, int32_t fd)
+{
+ if (connection->n_fds_out + 1> MAX_FDS_OUT) {
+ wl_connection_data(connection, WL_CONNECTION_WRITABLE);
You are not testing the return value of wl_connection_data(). What are
the implications if it fails? Shouldn't the failure be returned back up
in the call chain, and be dealt with, like in
http://cgit.freedesktop.org/wayland/wayland/commit/?id=b26774da5b907a71aa7c72ee1feb6dcde92b9fcb
True. We should abort the client then. I'm just no sure what to set
errno to in wl_connection_vmarshal.
Thanks for reviewing.
Cheers,
Ander
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel