diff --git a/src/client/ply-boot-client.c b/src/client/ply-boot-client.c index c9d5e81e..eaa80502 100644 --- a/src/client/ply-boot-client.c +++ b/src/client/ply-boot-client.c @@ -365,6 +365,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); @@ -378,12 +379,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; } @@ -461,7 +464,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 a2c42ab7..524188ad 100644 --- a/src/ply-boot-server.c +++ b/src/ply-boot-server.c @@ -246,9 +246,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; }