From 9a628f840f2f7a08575579507220a38e230e848b Mon Sep 17 00:00:00 2001 From: Sven Brinkmann Date: Tue, 6 Jun 2023 12:51:40 +0200 Subject: [PATCH] client/server: allow longer status string Use 2 instead of 1 byte for the status length when sending status udptaes to the demon. Also make sure to assert less than when checking the argument size. fixes #212 --- src/client/ply-boot-client.c | 13 ++++++++----- src/ply-boot-server.c | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/client/ply-boot-client.c b/src/client/ply-boot-client.c index 270d1d7a..adf348f1 100644 --- a/src/client/ply-boot-client.c +++ b/src/client/ply-boot-client.c @@ -366,6 +366,7 @@ ply_boot_client_get_request_string (ply_boot_client_t *client, size_t *request_size) { char *request_string; + uint16_t argument_size; assert (client != NULL); assert (request != NULL); @@ -379,12 +380,14 @@ ply_boot_client_get_request_string (ply_boot_client_t *client, return request_string; } - assert (strlen (request->argument) <= UCHAR_MAX); + assert (strlen (request->argument) < USHRT_MAX); + argument_size = strlen (request->argument) + 1; request_string = NULL; - asprintf (&request_string, "%s\002%c%s", request->command, - (char) (strlen (request->argument) + 1), request->argument); - *request_size = strlen (request_string) + 1; + asprintf (&request_string, "%s\002%c%c%s", request->command, + (char) (argument_size & 0xff), (char) (argument_size >> 8), + request->argument); + *request_size = strlen (request->command) + 1 + 2 + argument_size; return request_string; } @@ -462,7 +465,7 @@ ply_boot_client_queue_request (ply_boot_client_t *client, assert (client != NULL); assert (client->loop != NULL); assert (request_command != NULL); - assert (request_argument == NULL || strlen (request_argument) <= UCHAR_MAX); + assert (request_argument == NULL || strlen (request_argument) <= USHRT_MAX); if (client->daemon_can_take_request_watch == NULL && client->socket_fd >= 0) { diff --git a/src/ply-boot-server.c b/src/ply-boot-server.c index 07aa8c4d..61aeddf0 100644 --- a/src/ply-boot-server.c +++ b/src/ply-boot-server.c @@ -247,9 +247,9 @@ ply_boot_connection_read_request (ply_boot_connection_t *connection, *argument = NULL; if (header[1] == '\002') { - uint8_t argument_size; + uint16_t argument_size; - if (!ply_read (connection->fd, &argument_size, sizeof(uint8_t))) { + if (!ply_read (connection->fd, &argument_size, sizeof argument_size)) { free (*command); return false; }