DL::PtrData#to_a dumps core

e$B$3$s$P$s$O!"e(Bsheepman e$B$G$9!#e(B

DL::PtrData e$B$,0J2<$N$h$&$K$9$k$He(B core e$B$rEG$-$^$9!#e(B
PtrData e$B%/%i%9$O%]%$%s%?!<$N%i%C%Q!<$G$9$+$i!"07$$<!Bh$G$Oe(B
core e$B$rEG$$$F$7$^$&$N$O;EJ}$,$J$$$H;W$&$N$G$9$,!“0J2<$N>l9g$Ke(B core
e$B$re(B
e$BEG$$$F$7$^$&$N$O!”%P%0$J$s$8$c$J$$$+$H;W$$$^$9!#e(B

e$B;EMM$J$s$G$7$g$&$+e(B?

e$B$H$j$"$($:!"%Q%C%A$rE:IU$7$^$9!#e(B

$ cat t2.rb
require “dl”
sp = [‘a’, ‘b’, ‘c’].to_ptr
sp.to_a(‘S’)

$ ruby-1.8 -v t2.rb
ruby 1.8.6 (2007-03-05 patchlevel 5000) [i686-linux]
t2.rb:3: [BUG] Segmentation fault
ruby 1.8.6 (2007-03-05) [i686-linux]

zsh: abort ruby-1.8 -v t2.rb

$ svn diff ext/dl/ptr.c
Index: ext/dl/ptr.c

— ext/dl/ptr.c (revision 12023)
+++ ext/dl/ptr.c (working copy)
@@ -344,7 +344,7 @@
n = data->size / sizeof(void*);
break;
case ‘S’: case ‘s’:

  •  for (n=0; ((void**)(data->ptr))[n]; n++) {};
    
  •  n = data->size / sizeof(char*);
     break;
    
    default:
    n = 0;

ttateさんにCCします。

At Mon, 12 Mar 2007 00:14:20 +0900,
sheepman wrote:

こんばんは、sheepman です。

DL::PtrData が以下のようにすると core を吐きます。
PtrData クラスはポインターのラッパーですから、扱い次第では
core ã‚’åã„ã¦ã—ã¾ã†ã®ã¯ä»•æ–¹ãŒãªã„ã¨æ€ã†ã®ã§ã™ãŒã€ä»¥ä¸‹ã®å ´åˆã« core ã‚’
吐いてしまうのは、バグなんじゃないかと思います。

仕様なんでしょうか?

r4831 | ttate | 2003-10-22 23:29:20 +0900 (Wed, 22 Oct 2003) | 2 lines

Bugfix for PR#1196

というコミットに何か意図がありそうですが、どうでしょうね。

ruby 1.8.6 (2007-03-05) [i686-linux]
break;
case ‘S’: case ‘s’:

  •  for (n=0; ((void**)(data->ptr))[n]; n++) {};
    
  •  n = data->size / sizeof(char*);
     break;
    
    default:
    n = 0;


sheepman / TAMURA Takashi
[email protected]


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

Akinori MUSHA wrote:

DL::PtrData e$B$,0J2<$N$h$&$K$9$k$He(B core e$B$rEG$-$^$9!#e(B
PtrData e$B%/%i%9$O%]%$%s%?!<$N%i%C%Q!<$G$9$+$i!"07$$<!Bh$G$Oe(B
core e$B$rEG$$$F$7$^$&$N$O;EJ}$,$J$$$H;W$&$N$G$9$,!“0J2<$N>l9g$Ke(B core e$B$re(B
e$BEG$$$F$7$^$&$N$O!”%P%0$J$s$8$c$J$$$+$H;W$$$^$9!#e(B

r4831 | ttate | 2003-10-22 23:29:20 +0900 (Wed, 22 Oct 2003) | 2 lines

Bugfix for PR#1196

e$B$H$$$&%3%_%C%H$K2?$+0U?^$,$"$j$=$&$G$9$,!"$I$&$G$7$g$&$M!#e(B

e$BA4$/3P$($F$$$J$$$N$G$9$,!";W$$=P$9EXNO$r$7$F$_$^$9!#e(B
e$BFC$K2?$b$J$1$l$P%Q%C%A$rH?1G$5$;$^$9!#e(B

Takaaki T. wrote:

e$BA4$/3P$($F$$$J$$$N$G$9$,!";W$$=P$9EXNO$r$7$F$_$^$9!#e(B
e$BFC$K2?$b$J$1$l$P%Q%C%A$rH?1G$5$;$^$9!#e(B

e$B$O$d$j0U?^$O;W$$=P$;$J$$$N$G$9$,!"%P%0$@$H;W$&$N$G%Q%C%A$Ne(B
e$BDL$j=$@5$r9T$$$^$7$?!#e(B

e$B0lO"$N%P%0Js9p$"$j$,$H$&$4$6$$$^$9!#e(B> sheepmane$B$5$se(B

e$B;~4V$,$G$-$?$i%F%9%H%1!<%9$K$bH?1G$5$;$F$*$-$?$$$H;W$$$^$9!#e(B