[#66126] Creation/Conversion methods/functions table for Ruby types — SASADA Koichi <ko1@...>
Hi,
5 messages
2014/11/07
[#66248] [ruby-trunk - Feature #10423] [PATCH] opt_str_lit*: avoid literal string allocations — normalperson@...
Issue #10423 has been updated by Eric Wong.
3 messages
2014/11/13
[#66595] [ruby-trunk - Bug #10557] [Open] Block not given when the argument is a string — bartosz@...
Issue #10557 has been reported by Bartosz Kopinski.
3 messages
2014/11/30
[ruby-core:66420] [ruby-trunk - Bug #10535] Potential uninitialized reference pipe_open() in io.c
From:
normalperson@...
Date:
2014-11-22 21:58:22 UTC
List:
ruby-core #66420
Issue #10535 has been updated by Eric Wong.
asmaloney@gmail.com wrote:
> IF !defined(HAVE_WORKING_FORK) and !defined(HAVE_SPAWNV), THEN argc
> and argv are declared. (lines 5938, 5939)
> Unless I'm missing something in the #if #else #endif fiesta, they
> don't seem to be initialized anywhere.
I concur. On the other hand, which platforms are affected by this
problem? Any platform maintainers care to comment? Maybe we can
drop the code :)
A side note: we'd be better off reimplementing pipe_open (and similar
functions) individually on a per-platform basis to avoid the ugly
CPP conditionals.
Right now, it's hard-to-read for every platform. Of course, this split
requires much coordination between platform maintainers...
----------------------------------------
Bug #10535: Potential uninitialized reference pipe_open() in io.c
https://bugs.ruby-lang.org/issues/10535#change-50054
* Author: Andy Maloney
* Status: Open
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: ruby 2.2.0dev (2014-11-22 trunk 48537) [x86_64-darwin12.0]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
(From git commit f5063b7ea7e774519602f7a112d9acf536a1da33 of 22 November 2014.)
In **io.c** in the following function:
~~~
static VALUE
pipe_open(VALUE execarg_obj, const char *modestr, int fmode, convconfig_t *convconfig)
~~~
IF !defined(HAVE_WORKING_FORK) and !defined(HAVE_SPAWNV), THEN argc and argv are declared. (lines 5938, 5939)
Unless I'm missing something in the #if #else #endif fiesta, they don't seem to be initialized anywhere.
Then in the #else case at line 6069, we have this:
~~~
#else
if (argc) {
prog = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" "));
cmd = StringValueCStr(prog);
}
~~~
Best case, the compiler initializes argc to 0, which means this is dead code. Worst case, the compiler chooses not to initialize to 0, then *Bad Things* will happen.
--
https://bugs.ruby-lang.org/