[#7809] uninit bug in yaml/emitter.c — "Pat Eyler" <rubypate@...>
During our hacking night, we also looked at an UNINIT bug in yaml/emitter.c
[#7813] :!~ not a symbol — noreply@...
Bugs item #4344, was opened at 2006-05-03 17:41
[#7818] (security-related) patch to ALLOC macros to prevent integer overflow bugs — "Dominique Brezinski" <dominique.brezinski@...>
While fixing the integer overflow in rb_ary_fill(), it occurred to me
[#7833] segfault on Proc#call after setting a trace_func — Mauricio Fernandez <mfp@...>
$ cat bug2.rb
[#7843] Possible YAMl bug in 1.8.4 — Damphyr <damphyr@...>
OK, while parsing the td2 data from the ruby-lang website we stumbled on
Its probably a bug. I'm not familiar with the specifics, but Ruby
[#7858] Ruby threads working with native threads — "Francis Cianfrocca" <garbagecat10@...>
I recently wrote a network-event extension for Ruby ("eventmachine" in
[#7865] Strange interactions between Struct and 'pp' — noreply@...
Bugs item #4457, was opened at 2006-05-12 17:13
[#7872] Nonblocking socket-connect — "Francis Cianfrocca" <garbagecat10@...>
All, I needed a nonblocking socket connect for my asynchronous-event
In article <3a94cf510605140559l7baa0205le341dac4f47d424b@mail.gmail.com>,
How about introducing the method Socket#set_nonblocking, or alternatively
Hi,
Well, it's ok then. I'm comfortable adding in the nonblocking
Hi,
How about Socket#nbconnect and Socket#nbaccept?
On 5/15/06, Francis Cianfrocca <garbagecat10@gmail.com> wrote:
In article <1147709691.180288.28647.nullmailer@x31.priv.netlab.jp>,
[#7881] Segfault on x86_64 when built with -O0 in CFLAGS — noreply@...
Bugs item #4491, was opened at 2006-05-16 12:46
[#7882] reproducible bug in DRb on OSX — cremes.devlist@...
I've been tearing my hair out the last few days trying to track down
[#7909] SCRIPT_LINES__ issue when loading a file more than once — Mauricio Fernandez <mfp@...>
SCRIPT_LINES__ is an obscure feature very few people care about, but I happen
On Fri, May 19, 2006 at 06:46:05PM +0900, Mauricio Fernandez wrote:
Hi,
[#7923] Nonblocking accept — "Francis Cianfrocca" <garbagecat10@...>
Thanks to the Matz and colleagues for adding the *_nonblock functions. They
[#7928] set_trace_func: binding has wrong self value for return events — =?ISO-8859-15?Q?Florian_Gro=DF?= <florgro@...>
Moin.
Florian Growrote:
[PATCH] SCRIPT_LINES__ issue when loading a file more than once
SCRIPT_LINES__ is an obscure feature very few people care about, but I happen
to use it in the rcov code coverage tool to obtain the source code of the
program in execution[1], and ran into the following issue.
When a file ("the same" or with changing contents) is loaded more than once,
its contents get appended to SCRIPT_LINES__[filename] repeatedly:
$ cat tst.rb
SCRIPT_LINES__ = {}
4.times{ load "foo.rb" }
p SCRIPT_LINES__["./foo.rb"]
$ cat foo.rb
a = 1
$ ruby19 tst.rb
["a = 1\n", "a = 1\n", "a = 1\n", "a = 1\n"]
$ ruby tst.rb
["a = 1\n", "a = 1\n", "a = 1\n", "a = 1\n"]
I think it would make more sense to make it work in such way that the above
example returns either
(a)
[["a = 1\n"], ["a = 1\n"], ["a = 1\n"], ["a = 1\n"]]
that is, turning SCRIPT_LINES__[fname] into an array to which ruby appends
arrays holding the contents of the files with that name as it parses them, or
(b)
["a = 1\n"]
i.e. discarding all the previous data and keeping the contents from the last
parse.
I believe (a) could be implemented in HEAD; the ruby_1_8 branch could get (a)
or, if it's deemed too radical a change, (b).
Here's the patch for (a):
diff -p -u -r1.435 parse.y
--- parse.y 13 May 2006 08:55:39 -0000 1.435
+++ parse.y 19 May 2006 09:25:00 -0000
@@ -4556,15 +4556,19 @@ yycompile(VALUE vparser, const char *f,
Data_Get_Struct(vparser, struct parser_params, parser);
if (!compile_for_eval && rb_safe_level() == 0 &&
rb_const_defined(rb_cObject, rb_intern("SCRIPT_LINES__"))) {
- VALUE hash, fname;
+ VALUE hash, fname, arr;
hash = rb_const_get(rb_cObject, rb_intern("SCRIPT_LINES__"));
if (TYPE(hash) == T_HASH) {
fname = rb_str_new2(f);
- ruby_debug_lines = rb_hash_aref(hash, fname);
- if (NIL_P(ruby_debug_lines)) {
+ arr = rb_hash_aref(hash, fname);
+ if (NIL_P(arr)) {
+ arr = rb_ary_new();
+ rb_hash_aset(hash, fname, arr);
+ }
+ if(TYPE(arr) == T_ARRAY) {
ruby_debug_lines = rb_ary_new();
- rb_hash_aset(hash, fname, ruby_debug_lines);
+ rb_ary_push(arr, ruby_debug_lines);
}
}
if (line > 1) {
After applying:
$ ruby19 -v tst.rb
ruby 1.9.0 (2006-05-18) [i686-linux]
[["a = 1\n"], ["a = 1\n"], ["a = 1\n"], ["a = 1\n"]]
The patch for (b) is attached to this message.
After applying:
$ ruby -v tst.rb
ruby 1.8.4 (2006-05-18) [i686-linux]
["a = 1\n"]
[1] I need that to generate meaningful reports; it's AFAIK the most robust
way to get the source code in pure Ruby.
--
Mauricio Fernandez - http://eigenclass.org - singular Ruby
Attachments (1)
diff -p -u -r1.307.2.34 parse.y
--- parse.y 19 Apr 2006 04:57:55 -0000 1.307.2.34
+++ parse.y 19 May 2006 09:30:49 -0000
@@ -2583,11 +2583,8 @@ yycompile(f, line)
hash = rb_const_get(rb_cObject, rb_intern("SCRIPT_LINES__"));
if (TYPE(hash) == T_HASH) {
fname = rb_str_new2(f);
- ruby_debug_lines = rb_hash_aref(hash, fname);
- if (NIL_P(ruby_debug_lines)) {
- ruby_debug_lines = rb_ary_new();
- rb_hash_aset(hash, fname, ruby_debug_lines);
- }
+ ruby_debug_lines = rb_ary_new();
+ rb_hash_aset(hash, fname, ruby_debug_lines);
}
if (line > 1) {
VALUE str = rb_str_new(0,0);