raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f4f5a042a658e5b9101dbdf31abc2b2f1e77c325

commit f4f5a042a658e5b9101dbdf31abc2b2f1e77c325
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sun Sep 25 23:50:53 2016 +0900

    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 | 59 ++++++++++-----------------------
 1 file changed, 17 insertions(+), 42 deletions(-)

diff --git a/src/lib/efreet/efreet_desktop_command.c 
b/src/lib/efreet/efreet_desktop_command.c
index 2748d0c..c98ce0f 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;
-
-    l = eina_strlcpy(dest + *len, src, *size - *len);
-
-    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;
+   int append_len = strlen(src);
+
+   if ((*len + append_len + 1) > *size)
+     {
+        char *dest2 = realloc(dest, *size + append_len + 1024);
+        if (!dest2) return NULL;
+
+        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);
 }
 

-- 


Reply via email to