[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