From 91066bd06fd2e9e4c7631d9f9b197c104b858de1 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 11 Jan 2019 15:48:51 +0000 Subject: [PATCH] weekbd - fix text insert to not leak and have no warnings --- src/modules/wl_weekeyboard/e_mod_main.c | 30 +++++++++---------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/modules/wl_weekeyboard/e_mod_main.c b/src/modules/wl_weekeyboard/e_mod_main.c index ab6c763e2..298aadc2d 100644 --- a/src/modules/wl_weekeyboard/e_mod_main.c +++ b/src/modules/wl_weekeyboard/e_mod_main.c @@ -38,36 +38,26 @@ struct weekeyboard static char * _wkb_insert_text(const char *text, uint32_t offset, const char *insert) { - char *new_text = malloc(strlen(text) + strlen(insert) + 1); - uint32_t text_len = 0; + size_t insert_len, text_len; + char *new_text; - if (!new_text) - { - ERR("out of memory"); - return NULL; - } - - if ((!text) || (!insert)) - { - free(new_text); - return NULL; - } + if ((!text) || (!insert)) return NULL; text_len = strlen(text); - if (offset > text_len) - offset = text_len; - - new_text = malloc(text_len + strlen(insert) + 1); + insert_len = strlen(insert); + new_text = malloc(text_len +insert_len + 1); if (!new_text) { ERR("out of memory"); return NULL; } - strncpy(new_text, text, offset); + if (offset > text_len) offset = text_len; + + memcpy(new_text, text, offset); new_text[offset] = '\0'; - strcat(new_text, insert); - strcat(new_text, text + offset); + memcpy(new_text, insert, insert_len); + strcpy(new_text + insert_len, text + offset); return new_text; }