[#7271] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7272] [PATCH] OS X core dumps when $0 is changed and then loads shared libraries — noreply@...
Bugs item #3399, was opened at 2006-01-31 22:25
[#7274] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7277] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7280] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7286] Re: ruby-dev summary 28206-28273 — ara.t.howard@...
On Thu, 2 Feb 2006, Minero Aoki wrote:
mathew wrote:
mathew wrote:
I'm not sure we even need the 'with' syntax. Even if we do, it breaks
On 2006.02.07 10:03, Evan Webb wrote:
Umm, on what version are you seeing a warning there? I don't and never
On 2006.02.07 14:47, Evan Webb wrote:
I'd by far prefer it never emit a warning. The warning is assumes you
On Tue, 7 Feb 2006, Evan Webb wrote:
On Wed, 8 Feb 2006, Timothy J. Wood wrote:
[#7305] Re: Problem with weak references on OS X 10.3 — Mauricio Fernandez <mfp@...>
On Sun, Feb 05, 2006 at 08:33:40PM +0900, Christian Neukirchen wrote:
On Feb 5, 2006, at 5:05 AM, Mauricio Fernandez wrote:
On Wed, Feb 22, 2006 at 02:21:24PM +0900, Eric Hodel wrote:
Hi,
On Mon, Feb 27, 2006 at 12:45:28AM +0900, Yukihiro Matsumoto wrote:
On Sun, Feb 26, 2006 at 06:06:17PM +0100, Mauricio Fernandez wrote:
In article <20060226171117.GB29508@tux-chan>,
In article <1140968746.321377.18843.nullmailer@x31.priv.netlab.jp>,
Hi,
In article <m1FDshr-0006MNC@Knoppix>,
In article <87irr047sx.fsf@m17n.org>,
In article <87vev0hxu5.fsf@m17n.org>,
Just my quick 2 cents...
In article <92f5f81d0602281855g27e78f4eua8bf20e0b8e47b68@mail.gmail.com>,
Hi,
In article <m1FESAD-0001blC@Knoppix>,
Hi,
[#7331] Set containing duplicates — noreply@...
Bugs item #3506, was opened at 2006-02-08 22:52
[#7337] Parse error within Regexp — Bertram Scharpf <lists@...>
Hi,
Hi,
On Sun, Feb 12, 2006 at 01:34:55AM +0900, Yukihiro Matsumoto wrote:
[#7344] Ruby 1.8.4 on Mac OS X 10.4 Intel — Dae San Hwang <daesan@...>
Hi, all. This is my first time posting to this mailing list.
On Feb 12, 2006, at 6:14 AM, Dae San Hwang wrote:
[#7347] Latest change to eval.c — Kent Sibilev <ksruby@...>
It seems that the latest change to eval.c (1.616.2.154) has broken irb.
Hi,
Thanks, Matz.
[#7364] Method object used as Object#instance_eval block doesn't work (as expected) — noreply@...
Bugs item #3565, was opened at 2006-02-15 02:32
Hi,
Hi,
On Pr 2006-02-16 at 03:18 +0900, Yukihiro Matsumoto wrote:
[#7376] Minor tracer.rb patch — Daniel Berger <Daniel.Berger@...>
Hi,
[#7396] IO#reopen — Mathieu Bouchard <matju@...>
[#7403] Module#define_method "send hack" fails with Ruby 1.9 — Emiel van de Laar <emiel@...>
Hi List,
Emiel van de Laar <emiel@rednode.nl> writes:
Hi --
[#7439] FYI: ruby-lang.org is on spamcop blacklists — mathew <meta@...>
dnsbl/bl.spamcop.net returned deny: for
[#7442] GC Question — zdennis <zdennis@...>
I have been posting to the ruby-talk mailing list about ruby memory and GC, and I think it's ready
Hello.
Hello.
Re: [ ruby-Bugs-3399 ] [PATCH] OS X core dumps when $0 is changed and then loads shared libraries
H.Yamamoto wrote: > Hello. > > >>The problem is that Ruby is setting argv[1..argc-1] to 0 and OS X's dyld >>expects those to not be 0 as it uses them. Postgres had the same problem >>and describes why dyld uses argv: >> >>http://archives.postgresql.org/pgsql-hackers/2003-11/msg00449.php > > > Interesting, but Starndard C gurantees argc and argv should be modifiable, > so I think this is OSX's bug. Agreed that OS X should be able to handle this. But it appears that even after you change argc and argv in the process, you can get the original values back with these calls: extern char ***_NSGetArgv(void); extern int *_NSGetArgc(void); extern char ***_NSGetEnviron(void); which dyld is presumably doing. Since argc is passed in to main() and you can't change argc in main() for other parts of the OS to see, then this breaks the schematics of argv. >>It's not clear to me why in one branch of the function at the end, >>origargv[1..argc-1] are set to 0 and in the other they are not. Just out >>of consistently, it seems better to have both treat origargv[1..argc-1] the >>same and not set them to 0, which also prevents this core dump. >> >>Here's the patch: >> >>diff -ru ruby-1.8.4.orig/ruby.c ruby-1.8.4/ruby.c >>--- ruby-1.8.4.orig/ruby.c 2005-12-11 16:36:52.000000000 -0800 >>+++ ruby-1.8.4/ruby.c 2006-01-31 22:13:18.000000000 -0800 >>@@ -1067,8 +1067,6 @@ >> *s++ = '\0'; >> while (++i < len) >> *s++ = ' '; >>- for (i = 1; i < origargc; i++) >>- origargv[i] = 0; >> } >> rb_progname = rb_tainted_str_new2(origargv[0]); >>#endif > > > If this patch is applied, for example after set_arg0 > origargv[i] (i >= 1) can point to the location which is filled with ' ', > and can be unterminated with '\0' like this > > "fooboofoo\0 ?" > ^ > origargv[1] > > if '?' != '\0', strlen(origargv[i]) will access out of memory block > > > How about this? This is shorter, probably safer. Looks good. I've attached another patch based off your patch which does to following: 1) Repoints any origargv[] that now point into the new $0 string to the \0 terminating $0. This will prevent any problems of command line arguments seeing parts of $0. 2) In the if (len == 0) statement, rename 'i' and 's' to 'j' and 's1' to prevent shadowing of the same variable names at the top of the function. This is a style matter. 3) Changed a tab into 4 spaces to fix indentation. Regards, Blair -- Blair Zajac, Ph.D. CTO, OrcaWare Technologies <blair@orcaware.com> Subversion training, consulting and support http://www.orcaware.com/svn/
Attachments (1)
--- ruby.c.orig 2005-12-11 16:36:52.000000000 -0800
+++ ruby.c 2006-02-02 12:38:41.000000000 -0800
@@ -1033,43 +1033,47 @@
rb_progname = rb_tainted_str_new(s, i);
#else
if (len == 0) {
- char *s = origargv[0];
- int i;
+ char *s1 = origargv[0];
+ int j;
- s += strlen(s);
+ s1 += strlen(s1);
/* See if all the arguments are contiguous in memory */
- for (i = 1; i < origargc; i++) {
- if (origargv[i] == s + 1) {
- s++;
- s += strlen(s); /* this one is ok too */
+ for (j = 1; j < origargc; j++) {
+ if (origargv[j] == s1 + 1) {
+ s1++;
+ s1 += strlen(s1); /* this one is ok too */
}
else {
break;
}
}
#ifndef DOSISH
- if (s + 1 == envspace.begin) {
- s = envspace.end;
+ if (s1 + 1 == envspace.begin) {
+ s1 = envspace.end;
ruby_setenv("", NULL); /* duplicate environ vars */
}
#endif
- len = s - origargv[0];
+ len = s1 - origargv[0];
}
if (i >= len) {
i = len;
- memcpy(origargv[0], s, i);
- origargv[0][i] = '\0';
}
- else {
- memcpy(origargv[0], s, i);
- s = origargv[0]+i;
- *s++ = '\0';
- while (++i < len)
- *s++ = ' ';
- for (i = 1; i < origargc; i++)
- origargv[i] = 0;
+ memcpy(origargv[0], s, i);
+ memset(origargv[0] + i, '\0', len - i + 1);
+
+ /* If the new program name is longer than the original one, then
+ * have any command line arguments that were written over be
+ * empty strings. */
+ s = origargv[0] + i;
+ for (i = 1; i < origargc; ++i) {
+ if (origargv[i] < s ) {
+ origargv[i] = s;
+ } else {
+ break;
+ }
}
+
rb_progname = rb_tainted_str_new2(origargv[0]);
#endif
}