[#11073] segfault printing instruction sequence for iterator — <noreply@...>

Bugs item #10527, was opened at 2007-05-02 14:42

14 messages 2007/05/02
[#11142] Re: [ ruby-Bugs-10527 ] segfault printing instruction sequence for iterator — Nobuyoshi Nakada <nobu@...> 2007/05/10

Hi,

[#11188] Re: [ ruby-Bugs-10527 ] segfault printing instruction sequence for iterator — Paul Brannan <pbrannan@...> 2007/05/16

On Thu, May 10, 2007 at 04:51:18PM +0900, Nobuyoshi Nakada wrote:

[#11234] Planning to release 1.8.6 errata — Urabe Shyouhei <shyouhei@...>

Hi all.

17 messages 2007/05/25

[ ruby-Bugs-3399 ] [PATCH] OS X core dumps when $0 is changed and then loads shared libraries

From: <noreply@...>
Date: 2007-05-29 17:49:26 UTC
List: ruby-core #11309
Bugs item #3399, was opened at 2006-01-31 22:25
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=3399&group_id=426

>Category: Language / Runtime / Core Libraries
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Blair Zajac (blairzajac)
Assigned to: Nobody (None)
Summary: [PATCH] OS X core dumps when $0 is changed and then loads shared libraries

Initial Comment:
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

Regards,
Blair


----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=3399&group_id=426

In This Thread

Prev Next