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

MacPorts noreply at macports.org
Thu Mar 24 07:18:48 PDT 2016


#6993: [PATCH] ruby: core dumps when $0 is changed and then loads shared libraries
----------------------+--------------------------------
  Reporter:  blair@…  |      Owner:  macports-tickets@…
      Type:  defect   |     Status:  closed
  Priority:  Normal   |  Milestone:
 Component:  ports    |    Version:  1.0
Resolution:  fixed    |   Keywords:
      Port:  ruby     |
----------------------+--------------------------------
Changes (by ryandesign@…):

 * port:   => ruby


Old description:

> [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

New description:

 [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

--

-- 
Ticket URL: <https://trac.macports.org/ticket/6993#comment:4>
MacPorts <https://www.macports.org/>
Ports system for OS X


More information about the macports-tickets mailing list