From f4f5a042a658e5b9101dbdf31abc2b2f1e77c325 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sun, 25 Sep 2016 23:50:53 +0900 Subject: [PATCH] efreet - fix command generation by fixing string buffer expansion so by chance i discovered efreet is doing bad things(tm) when expanding/appending to string buffers to generate commands based off desktop files. the string append basically was buggy, so fixed it by making it a lot simpler and more obvious and now reliable. @fix --- src/lib/efreet/efreet_desktop_command.c | 55 +++++++------------------ 1 file changed, 15 insertions(+), 40 deletions(-) diff --git a/src/lib/efreet/efreet_desktop_command.c b/src/lib/efreet/efreet_desktop_command.c index 2748d0c40b..c98ce0fbdf 100644 --- a/src/lib/efreet/efreet_desktop_command.c +++ b/src/lib/efreet/efreet_desktop_command.c @@ -846,53 +846,28 @@ efreet_desktop_command_path_absolute(const char *path) static char * efreet_string_append(char *dest, int *size, int *len, const char *src) { - int l; - int off = 0; + int append_len = strlen(src); - l = eina_strlcpy(dest + *len, src, *size - *len); + if ((*len + append_len + 1) > *size) + { + char *dest2 = realloc(dest, *size + append_len + 1024); + if (!dest2) return NULL; - while (l > *size - *len) - { - char *tmp; - /* we successfully appended this much */ - off += *size - *len - 1; - *len = *size - 1; - *size += 1024; - tmp = realloc(dest, *size); - if (!tmp) - { - free(dest); - return NULL; - } - dest = tmp; - *(dest + *len) = '\0'; - - l = eina_strlcpy(dest + *len, src + off, *size - *len); - } - *len += l; - - return dest; + dest = dest2; + *size += append_len + 1024; + } + strcpy(dest + *len, src); + *len += append_len; + return dest; } static char * efreet_string_append_char(char *dest, int *size, int *len, char c) { - if (*len >= *size - 1) - { - char *tmp; - *size += 1024; - tmp = realloc(dest, *size); - if (!tmp) - { - free(dest); - return NULL; - } - dest = tmp; - } + char str[2]; - dest[(*len)++] = c; - dest[*len] = '\0'; - - return dest; + str[0] = c; + str[1] = 0; + return efreet_string_append(dest, size, len, str); }