From 0303c1d42b0dc8c8dfe96b885adb7f7ab9098e85 Mon Sep 17 00:00:00 2001 From: ko1 Date: Fri, 9 Nov 2007 01:10:06 +0000 Subject: [PATCH] * 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 --- ChangeLog | 4 ++++ ruby.c | 15 +++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a51e12e50..875a6c9aa7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Nov 9 10:05:54 2007 Koichi Sasada + + * ruby.c (set_arg0): fix breaking environ bugs. + Fri Nov 9 07:26:04 2007 Yukihiro Matsumoto * random.c: update MT URL.[ruby-core:13305]. 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);