summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Toso <victortoso@redhat.com>2021-08-25 19:17:39 +0200
committerVictor Toso <victortoso@redhat.com>2021-10-28 08:59:52 +0200
commitf298f497584d7535cf4c5ddc30d036c0a3f62502 (patch)
tree16ed55e909b59c08d10daf39fd9ca0e88f810b7e
parenta01820bc856fc56e0e32d5c2ef4db3f1f8365065 (diff)
usbredirhost: restrain setting buffered_output_size_cb
Application should not be able to set this callback if data queue is on the library's side. Signed-off-by: Victor Toso <victortoso@redhat.com>
-rw-r--r--usbredirhost/usbredirhost.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/usbredirhost/usbredirhost.c b/usbredirhost/usbredirhost.c
index e9a9713..34f5b14 100644
--- a/usbredirhost/usbredirhost.c
+++ b/usbredirhost/usbredirhost.c
@@ -116,6 +116,7 @@ struct usbredirhost {
usbredirhost_buffered_output_size buffered_output_size_func;
void *func_priv;
int verbose;
+ int flags;
libusb_context *ctx;
libusb_device *dev;
libusb_device_handle *handle;
@@ -691,6 +692,7 @@ struct usbredirhost *usbredirhost_open_full(
host->func_priv = func_priv;
host->verbose = verbose;
host->disconnected = 1; /* No device is connected initially */
+ host->flags = flags;
host->parser = usbredirparser_create();
if (!host->parser) {
log_func(func_priv, usbredirparser_error,
@@ -1442,6 +1444,13 @@ void usbredirhost_set_buffered_output_size_cb(struct usbredirhost *host,
return;
}
+ if (!(host->flags & usbredirhost_fl_write_cb_owns_buffer)) {
+ host->log_func(host->func_priv, usbredirparser_warning,
+ "can't set callback as usbredirhost owns the output "
+ "buffer (flag: usbredirhost_fl_write_cb_owns_buffer)");
+ return;
+ }
+
host->buffered_output_size_func = buffered_output_size_func;
}