keyboard: Fix insert_text() string utility

strncat() into a newly allocated buffer isn't well-defined.  I don't know
how this didn't crash all the time, getting blocks from malloc() with
a NUL in the first byte must be fairly common.

Closes: https://bugs.freedesktop.org/show_bug.cgi?id=71750
dev
Kristian Høgsberg 11 years ago
parent b0fb25dedc
commit a548b4b85c
  1. 11
      clients/keyboard.c

@ -384,12 +384,13 @@ resize_handler(struct widget *widget,
static char * static char *
insert_text(const char *text, uint32_t offset, const char *insert) insert_text(const char *text, uint32_t offset, const char *insert)
{ {
char *new_text = xmalloc(strlen(text) + strlen(insert) + 1); int tlen = strlen(text), ilen = strlen(insert);
char *new_text = xmalloc(tlen + ilen + 1);
strncat(new_text, text, offset); memcpy(new_text, text, offset);
new_text[offset] = '\0'; memcpy(new_text + offset, insert, ilen);
strcat(new_text, insert); memcpy(new_text + offset + ilen, text + offset, tlen - offset);
strcat(new_text, text + offset); new_text[tlen + ilen] = '\0';
return new_text; return new_text;
} }

Loading…
Cancel
Save