summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-09 01:10:06 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-09 01:10:06 +0000
commit0303c1d42b0dc8c8dfe96b885adb7f7ab9098e85 (patch)
treec16ed123e1e67f0f2c92546fbac44264d9d6267f /ruby.c
parent9099eab331f91a2c26c6722535193185e40e9296 (diff)
* ruby.c (set_arg0): fix breaking environ bugs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13842 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/ruby.c b/ruby.c
index d3c77ace37..6f66e3a92c 100644
--- a/ruby.c
+++ b/ruby.c
@@ -1173,7 +1173,7 @@ get_arglen(int argc, char **argv)
static void
set_arg0(VALUE val, ID id)
{
- char *s;
+ char *s, *t;
long i;
if (origarg.argv == 0)
@@ -1204,13 +1204,16 @@ set_arg0(VALUE val, ID id)
}
memcpy(origarg.argv[0], s, i);
- s = origarg.argv[0] + i;
- *s = '\0';
- if (i + 1 < origarg.len) memset(s + 1, ' ', origarg.len - i - 1);
+ t = origarg.argv[0] + i;
+ *t = '\0';
+
+ if (i + 1 < origarg.len) memset(t + 1, ' ', origarg.len - i - 1);
+
{
int j;
- for (j = 1; j < origarg.argc; j++)
- origarg.argv[i] = s;
+ for (j = 1; j < origarg.argc; j++) {
+ origarg.argv[j] = t;
+ }
}
#endif
rb_progname = rb_tainted_str_new(s, i);