aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2018-01-19 15:20:31 -0600
committerDaniel Stone <daniels@collabora.com>2018-01-22 09:45:47 +0000
commite5b52f673c508a5f95c88c6cc99026cd2b762b5e (patch)
treecc66036865ce1e60c5abefb82de0a9f510ee9122 /src
parenttests: Add missing file to distribution (diff)
downloadwayland-e5b52f673c508a5f95c88c6cc99026cd2b762b5e.tar
wayland-e5b52f673c508a5f95c88c6cc99026cd2b762b5e.tar.gz
wayland-e5b52f673c508a5f95c88c6cc99026cd2b762b5e.tar.bz2
wayland-e5b52f673c508a5f95c88c6cc99026cd2b762b5e.tar.lz
wayland-e5b52f673c508a5f95c88c6cc99026cd2b762b5e.tar.xz
wayland-e5b52f673c508a5f95c88c6cc99026cd2b762b5e.tar.zst
wayland-e5b52f673c508a5f95c88c6cc99026cd2b762b5e.zip
connection: Clear correct args when clearing fds to -1
commit 52609ddf79a96fee0465006e2c6339a3a5d23a87 was intended to set fds to -1 in the arg list, however it failed to account for version information at the start of signatures. Most noticably, this broke mesa's create_prime_buffer by setting width to -1 instead of the fd, as the width was the argument following the fd, and the version was one byte long. This should close https://bugs.kde.org/show_bug.cgi?id=389200 Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Daniel Stone <daniels@collabora.com>
Diffstat (limited to 'src')
-rw-r--r--src/connection.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/connection.c b/src/connection.c
index 6f83bab..5d5711f 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -533,10 +533,13 @@ wl_argument_from_va_list(const char *signature, union wl_argument *args,
static void
wl_closure_clear_fds(struct wl_closure *closure)
{
+ const char *signature = closure->message->signature;
+ struct argument_details arg;
int i;
- for (i = 0; closure->message->signature[i]; i++) {
- if (closure->message->signature[i] == 'h')
+ for (i = 0; i < closure->count; i++) {
+ signature = get_next_argument(signature, &arg);
+ if (arg.type == 'h')
closure->args[i].h = -1;
}
}