From: rucila Date: 2006-08-04T00:44:49+09:00 Subject: [ruby-dev:29182] [].pack("P") で SEGV --0-1610984663-1154619888=:7196 Content-Type: text/plain; charset=iso-2022-jp rucila と申します。 Array#pack の "P" で配列の長さが足りない時に SEGV が発生することが あります。 環境やスクリプトによっては別のエラーが発生しますが、 エラー内容が "too few argument" でないものになります。 % ruby -v ruby 1.8.4 (2005-12-24) [i686-linux] % ruby [].pack("P") -:1:in `pack': can't convert false into String (TypeError) from -:1 たぶんここだと思います。 Index: pack.c =================================================================== RCS file: /src/ruby/pack.c,v retrieving revision 1.86 diff -u -r1.86 pack.c --- pack.c 18 Jul 2006 07:02:35 -0000 1.86 +++ pack.c 3 Aug 2006 15:20:28 -0000 @@ -454,7 +454,7 @@ items = RARRAY(ary)->len; idx = 0; -#define THISFROM RARRAY(ary)->ptr[idx] +#define THISFROM (items > 0 ? RARRAY(ary)->ptr[idx] : (rb_raise(rb_eArgError, toofew), 0)) #define NEXTFROM (items-- > 0 ? RARRAY(ary)->ptr[idx++] : (rb_raise(rb_eArgError, "too few arguments"),0)) while (p < pend) { --------------------------------- Let's start Yahoo! Auction - Free Campaign Now! --0-1610984663-1154619888=:7196 Content-Type: text/html; charset=iso-2022-jp rucila と申します。

Array#pack の "P" で配列の長さが足りない時に SEGV が発生することが
あります。
環境やスクリプトによっては別のエラーが発生しますが、
エラー内容が "too few argument" でないものになります。

% ruby -v
ruby 1.8.4 (2005-12-24) [i686-linux]
% ruby
[].pack("P")
-:1:in `pack': can't convert false into String (TypeError)
        from -:1

たぶんここだと思います。

Index: pack.c
===================================================================
RCS file: /src/ruby/pack.c,v
retrieving revision 1.86
diff -u -r1.86 pack.c
--- pack.c      18 Jul 2006 07:02:35 -0000      1.86
+++ pack.c      3 Aug 2006 15:20:28 -0000
@@ -454,7 +454,7 @@
     items = RARRAY(ary)->len;
     idx = 0;

-#define THISFROM RARRAY(ary)->ptr[idx]
+#define THISFROM (items > 0 ? RARRAY(ary)->ptr[idx] : (rb_raise(rb_eArgError, toofew), 0))
 #define NEXTFROM (items-- > 0 ? RARRAY(ary)->ptr[idx++] : (rb_raise(rb_eArgError, "too few arguments"),0))

     while (p < pend) {


 


Let's start Yahoo! Auction - Free Campaign Now!
--0-1610984663-1154619888=:7196--