From be9d924cf833fd4f4de478cbc5dccbb3775acc3d Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Sat, 15 Dec 2012 13:46:53 +0200 Subject: Reserve enough memory when storing a DC's nickname in gtk-gui.c: The input text field in set_dc_nickname() has a limit of 68 unicode characters, which are 136 bytes. In remember_dc(), to make sure that this nickname, the deviceid (4 bytes) and also the extra characters (",{}") always fit wihout truncation (from snprintf) in the allocated stack buffer, we increase the size of the buffer to 256 bytes. Signed-off-by: Lubomir I. Ivanov Signed-off-by: Dirk Hohndel --- gtk-gui.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gtk-gui.c b/gtk-gui.c index f3646b0ff..6b3371838 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -2043,7 +2043,7 @@ static char *cleanedup_nickname(const char *nickname, int len) void remember_dc(uint32_t deviceid, const char *nickname, gboolean change_conf) { if (!get_dc_nickname(deviceid)) { - char buffer[80]; + char buffer[256]; struct dcnicknamelist *nn_entry = malloc(sizeof(struct dcnicknamelist)); nn_entry->deviceid = deviceid; /* make sure there are no curly braces or commas in the string and that @@ -2051,7 +2051,7 @@ void remember_dc(uint32_t deviceid, const char *nickname, gboolean change_conf) nn_entry->nickname = cleanedup_nickname(nickname, sizeof(buffer) - 12); nn_entry->next = nicknamelist; nicknamelist = nn_entry; - snprintf(buffer, 80, "{%08x,%s}", deviceid, nn_entry->nickname); + snprintf(buffer, sizeof(buffer), "{%08x,%s}", deviceid, nn_entry->nickname); nicknamestring = realloc(nicknamestring, strlen(nicknamestring) + strlen(buffer) + 1); strcat(nicknamestring, buffer); if (change_conf) -- cgit v1.2.3-70-g09d2