Opened 18 years ago

Closed 18 years ago

Last modified 8 years ago

#6993 closed defect (fixed)

[PATCH] ruby: core dumps when $0 is changed and then loads shared libraries

Reported by: blair (Blair Zajac) Owned by: macports-tickets@…
Priority: Normal Milestone:
Component: ports Version: 1.0
Keywords: Cc: olegb@…
Port: ruby

Description (last modified by ryandesign (Ryan Carsten Schmidt))

[Sorry, typed enter too soon]

This bug is reported at upstream:

http://rubyforge.org/tracker/index.php?func=detail&aid=3399&group_id=426&atid=1698

This is a patch to fix the following issue that occurs on OS X. If you run

$ irb -r rubygems -r XXX

where XXX may be Imagemagick, Postgres, etc then you may get a core dump. It appears to only happen with non Ruby-core packages.

I've reproduced the core dump with the following combinations of platforms:

Fink's Ruby 1.8.3, postgres 0.7.1 (against Postgresql 8.1.1)
Fink's Ruby 1.8.4, postgres 0.7.1 (against Postgresql 8.1.2)
Fink's Ruby 1.8.4, ruby-postgres 0.7.1.2005.12.21 (against Postgresql 8.1.2)
Darwin Ports 1.8.4, postgres 0.7.1 (against Postgresql 8.1.2)

This is all described in

http://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-talk/142806

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

The fix is not to set argv[1..argc-1] to NULL in set_arg0. This code was was added in

http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/ruby.c.diff?r1=1.51;r2=1.52;f=h 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

I'm going to roll this into the Fink ruby package. It would be nice to see it in Darwin Ports, as I got the same core dumps in DP.

Regards,
Blair

Attachments (1)

003-prevent-dyld-core-dumps-after-setting-argv.patch (1.7 KB) - added by blair (Blair Zajac) 18 years ago.
Patch to prevent core dumps.

Download all attachments as: .zip

Change History (5)

comment:1 Changed 18 years ago by olegb@…

Cc: olegb@… added

this patch fails to apply here - maybe you could attach it ?

comment:2 Changed 18 years ago by blair (Blair Zajac)

Here's the patch that I put into the Fink package.

Regards, Blair

Changed 18 years ago by blair (Blair Zajac)

Patch to prevent core dumps.

comment:3 Changed 18 years ago by olegb@…

Resolution: fixed
Status: newclosed

commited, thanks

comment:4 Changed 8 years ago by ryandesign (Ryan Carsten Schmidt)

Description: modified (diff)
Port: ruby added
Note: See TracTickets for help on using tickets.