Project

General

Profile

Backport #3235 » ruby_envspace.patch

Bugfix for environment-space scanner to only copy/move contiguous environment-variables. - rubyjedi (Laurence Lee), 05/29/2010 06:05 PM

View differences:

ruby-1.8.8-head/ruby.c (working copy)
get_arglen(int argc, char **argv)
{
char *s = argv[0];
int i;
int i, j;
if (!argc) return 0;
s += strlen(s);
......
}
}
#if defined(USE_ENVSPACE_FOR_ARG0)
if (environ && (s+1 == environ[0])) {
s++;
s += strlen(s);
for (i = 1; environ[i]; i++) {
if (environ[i] == s + 1) {
if (environ) {
for (i = 0; environ[i] == s+1; i++) {
s++;
s += strlen(s); /* this one is ok too */
}
}
# if defined(HAVE_SETENV) && defined(HAVE_UNSETENV)
{
char *t = malloc(s - environ[0] + 1);
for (i = 0; environ[i]; i++) {
size_t len = strlen(environ[i]) + 1;
memcpy(t, environ[i], len);
environ[i] = t;
for (j = 0; j<i && environ[j]; j++) {
size_t len = strlen(environ[j]) + 1;
memcpy(t, environ[j], len);
environ[j] = t;
t += len;
}
}
(2-2/2)