starter: Fail sending stroke message if a string exceeds the buffer size
Instead of silently setting the string value to NULL, we fail completely in sending the message to notify the user. Fixes #844.
This commit is contained in:
@@ -35,10 +35,16 @@ static char* push_string(stroke_msg_t *msg, char *string)
|
|||||||
{
|
{
|
||||||
unsigned long string_start = msg->length;
|
unsigned long string_start = msg->length;
|
||||||
|
|
||||||
if (string == NULL || msg->length + strlen(string) >= sizeof(stroke_msg_t))
|
if (string == NULL)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
else if ((size_t)msg->length + strlen(string) >= sizeof(stroke_msg_t))
|
||||||
|
{
|
||||||
|
/* set invalid length to fail during message send */
|
||||||
|
msg->length = ~0;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg->length += strlen(string) + 1;
|
msg->length += strlen(string) + 1;
|
||||||
@@ -53,6 +59,12 @@ static int send_stroke_msg (stroke_msg_t *msg)
|
|||||||
char *uri, buffer[64];
|
char *uri, buffer[64];
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
|
if (msg->length > sizeof(stroke_msg_t))
|
||||||
|
{
|
||||||
|
DBG1(DBG_APP, "stroke message exceeds buffer size");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* starter is not called from commandline, and therefore absolutely silent */
|
/* starter is not called from commandline, and therefore absolutely silent */
|
||||||
msg->output_verbosity = -1;
|
msg->output_verbosity = -1;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user