~ chicken-core (chicken-5) b89d1d4fc17fea01916fff8ad23b8d3a756abcf9


commit b89d1d4fc17fea01916fff8ad23b8d3a756abcf9
Author:     Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Thu Feb 6 10:00:17 2014 +0100
Commit:     Mario Domenech Goulart <mario.goulart@gmail.com>
CommitDate: Fri Feb 7 20:37:45 2014 -0200

    Fix strlcat usage in setenv: use the start of the string as dest buffer and append the "=" using strlcat instead of overwriting the NUL character.
    
    Signed-off-by: Mario Domenech Goulart <mario.goulart@gmail.com>

diff --git a/posix-common.scm b/posix-common.scm
index 3911b07b..93884def 100644
--- a/posix-common.scm
+++ b/posix-common.scm
@@ -101,7 +101,7 @@ static char C_time_string [TIME_STRING_MAXLENGTH + 1];
 # define C_setenv(x, y)     C_fix(setenv((char *)C_data_pointer(x), (char *)C_data_pointer(y), 1))
 #else
 # if defined(_WIN32) && !defined(__CYGWIN__)
-#  define C_unsetenv(s)      C_fix(C_setenv(s, C_SCHEME_FALSE))
+#  define C_unsetenv(s)      C_setenv(s, C_SCHEME_FALSE)
 # else
 #  define C_unsetenv(s)      C_fix(putenv((char *)C_data_pointer(s)))
 # endif
@@ -114,8 +114,8 @@ static C_word C_fcall C_setenv(C_word x, C_word y) {
   if(buf == NULL) return(C_fix(0));
   else {
     C_strlcpy(buf, sx, buf_len);
-    buf[ n1 ] = '=';
-    C_strlcat(buf + n1 + 1, sy, buf_len);
+    C_strlcat(buf, "=", buf_len);
+    C_strlcat(buf, sy, buf_len);
     return(C_fix(putenv(buf)));
   }
 }
Trap