weekbd - fix text insert to not leak and have no warnings

This commit is contained in:
Carsten Haitzler 2019-01-11 15:48:51 +00:00
parent 135c5679fb
commit 91066bd06f
1 changed files with 10 additions and 20 deletions

View File

@ -38,36 +38,26 @@ struct weekeyboard
static char * static char *
_wkb_insert_text(const char *text, uint32_t offset, const char *insert) _wkb_insert_text(const char *text, uint32_t offset, const char *insert)
{ {
char *new_text = malloc(strlen(text) + strlen(insert) + 1); size_t insert_len, text_len;
uint32_t text_len = 0; char *new_text;
if (!new_text) if ((!text) || (!insert)) return NULL;
{
ERR("out of memory");
return NULL;
}
if ((!text) || (!insert))
{
free(new_text);
return NULL;
}
text_len = strlen(text); text_len = strlen(text);
if (offset > text_len) insert_len = strlen(insert);
offset = text_len; new_text = malloc(text_len +insert_len + 1);
new_text = malloc(text_len + strlen(insert) + 1);
if (!new_text) if (!new_text)
{ {
ERR("out of memory"); ERR("out of memory");
return NULL; return NULL;
} }
strncpy(new_text, text, offset); if (offset > text_len) offset = text_len;
memcpy(new_text, text, offset);
new_text[offset] = '\0'; new_text[offset] = '\0';
strcat(new_text, insert); memcpy(new_text, insert, insert_len);
strcat(new_text, text + offset); strcpy(new_text + insert_len, text + offset);
return new_text; return new_text;
} }