linux-dmabuf-v1: properly validate flags
We were send a protocol error if INTERLACED or BOTTOM_FIRST was set. This is incorrect for the zwp_linux_dmabuf_params.create code-path because this kills the client without allowing it to gracefully handle the error. We should only send a protocol error if the client provides a bit not listed in the protocol definition.
This commit is contained in:
parent
8274c85d21
commit
9a4e1095ca
|
@ -204,6 +204,17 @@ static void params_create_common(struct wl_resource *params_resource,
|
|||
goto err_out;
|
||||
}
|
||||
|
||||
/* reject unknown flags */
|
||||
uint32_t all_flags = ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT |
|
||||
ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_INTERLACED |
|
||||
ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_BOTTOM_FIRST;
|
||||
if (flags & ~all_flags) {
|
||||
wl_resource_post_error(params_resource,
|
||||
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_FORMAT,
|
||||
"Unknown dmabuf flags %"PRIu32, flags);
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
attribs.width = width;
|
||||
attribs.height = height;
|
||||
attribs.format = format;
|
||||
|
@ -265,14 +276,6 @@ static void params_create_common(struct wl_resource *params_resource,
|
|||
}
|
||||
}
|
||||
|
||||
/* reject unknown flags */
|
||||
if (attribs.flags & ~ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT) {
|
||||
wl_resource_post_error(params_resource,
|
||||
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_FORMAT,
|
||||
"Unknown dmabuf flags %"PRIu32, attribs.flags);
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
/* Check if dmabuf is usable */
|
||||
if (!check_import_dmabuf(linux_dmabuf, &attribs)) {
|
||||
goto err_failed;
|
||||
|
|
Loading…
Reference in New Issue