[#24698] NKF(nkf2)を1.8ブランチに入れました — "NARUSE, Yui" <naruse@...>

naruseです。

14 messages 2004/11/03
[#24734] Re: NKF(nkf2)を1.8ブランチに入れました — 堀川 久 <vzw00011@...> 2004/11/06

こんにちは。

[#24720] メール関係ライブラリの標準添付について — MoonWolf <moonwolf@...>

MoonWolfです。

17 messages 2004/11/05
[#24721] Re: メール関係ライブラリの標準添付について — Yukihiro Matsumoto <matz@...> 2004/11/05

まつもと ゆきひろです

[#24722] Re: メール関係ライブラリの標準添付について — MoonWolf <moonwolf@...> 2004/11/05

MoonWolfです。

[#24804] Re: まつもとさんの負担を減らすために、何ができるだろう — "URABE Shyouhei aka.mput" <root@...>

mput です。 ruby-dev に移動します。

21 messages 2004/11/13
[#24805] Re: まつもとさんの負担を減らすために、何ができるだろう — Tanaka Akira <akr@...17n.org> 2004/11/13

In article <2D6284E3-351D-11D9-B7EF-000393735AAE@mput.dip.jp>,

[#24806] Re: まつもとさんの負担を減らすために、何ができるだろう — "URABE Shyouhei aka.mput" <root@...> 2004/11/13

mput です。

[#24808] Re: まつもとさんの負担を減らすために、何ができるだろう — Masayoshi Takahashi <maki@...> 2004/11/13

高橋征義です。

[#24809] Re: まつもとさんの負担を減らすために、何ができるだろう — "URABE Shyouhei aka.mput" <root@...> 2004/11/13

mput です。

[#24834] Process.getrlimit and Process.setrlimit — Tanaka Akira <akr@...17n.org>

Process.getrlimit と Process.setrlimit が欲しいので実装してみました。

25 messages 2004/11/13

[#24965] sync and stdio buffering — Tanaka Akira <akr@...17n.org>

ちょっとした思いつきなのですが、

12 messages 2004/11/26

[#24993] rb_io_sysread dumps core [BUG] rb_sys_fail() - errno == 0 — Tietew <tietew-ml-ruby-dev@...>

ソケットとスレッドを大量に使うアプリ(具体的には IRCbot です)を

13 messages 2004/11/29

[#25003] IO#flush dumps core again — Tanaka Akira <akr@...17n.org>

次のようにすると core を吐きます。

28 messages 2004/11/30
[#25004] Re: IO#flush dumps core again — nobu@... 2004/11/30

なかだです。

[#25005] Re: IO#flush dumps core again — Yukihiro Matsumoto <matz@...> 2004/11/30

まつもと ゆきひろです

[#25009] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/01

In article <1101836040.635395.27476.nullmailer@x31.priv.netlab.jp>,

[#25014] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/01

In article <1101878558.979715.1359.nullmailer@x31.priv.netlab.jp>,

[#25015] Re: IO#flush dumps core again — Yukihiro Matsumoto <matz@...> 2004/12/01

まつもと ゆきひろです

[#25056] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/05

In article <1101888165.570792.4192.nullmailer@x31.priv.netlab.jp>,

[#25074] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/06

In article <1102293033.356112.2288.nullmailer@x31.priv.netlab.jp>,

[ruby-dev:24826] [4294967294].pack("N") causes RangeError

From: GOTOU Yuuzou <gotoyuzo@...>
Date: 2004-11-13 14:45:40 UTC
List: ruby-dev #24826
1.8でArray#packがエラーになります。

sawara% ruby19 -ve 'p [4294967294].pack("N")'
ruby 1.9.0 (2004-11-12) [i386-netbsd]
"\377\377\377\376"
sawara% ruby18 -ve 'p [4294967294].pack("N")'
ruby 1.8.2 (2004-11-12) [i386-netbsd]
-e:1:in `pack': bignum too big to convert into `long' (RangeError)
        from -e:1

1.9からバックポートするとこんな感じでしょうか。

-- 
ごとうゆうぞう

Index: bignum.c
===================================================================
RCS file: /var/cvs/src/ruby/bignum.c,v
retrieving revision 1.100.2.8
diff -u -p -F^[^A-Za-z0-9_+-]*\(class\|module\|def\)[^A-Za-z0-9_+-] -r1.100.2.8 bignum.c
--- bignum.c	3 Sep 2004 09:00:29 -0000	1.100.2.8
+++ bignum.c	13 Nov 2004 14:29:21 -0000
@@ -748,6 +748,17 @@ big2ulong(x, type)
 }
 
 unsigned long
+rb_big2ulong_pack(x)  
+    VALUE x;  
+{
+    unsigned long num = big2ulong(x, "unsigned long", Qfalse);
+    if (!RBIGNUM(x)->sign) {
+        return -num;
+    }
+    return num;
+}
+
+unsigned long
 rb_big2ulong(x)
     VALUE x;
 {
Index: pack.c
===================================================================
RCS file: /var/cvs/src/ruby/pack.c,v
retrieving revision 1.62.2.7
diff -u -p -F^[^A-Za-z0-9_+-]*\(class\|module\|def\)[^A-Za-z0-9_+-] -r1.62.2.7 pack.c
--- pack.c	10 Nov 2004 07:17:51 -0000	1.62.2.7
+++ pack.c	13 Nov 2004 14:29:21 -0000
@@ -331,53 +331,22 @@ endian()
 #define VTOHD(x,y)	vtohd(x)
 #endif
 
-#if SIZEOF_LONG == SIZE32
-typedef long I32;
-typedef unsigned long U32;
-#define NUM2I32(x) NUM2LONG(x)
-#define NUM2U32(x) NUM2ULONG(x)
-#else
-typedef int I32;
-typedef unsigned int U32;
-# if SIZEOF_INT == SIZE32
-#  define NUM2I32(x) NUM2INT(x)
-#  define NUM2U32(x) NUM2UINT(x)
-# else
-
-#define I32_MAX 2147483647
-#define I32_MIN (-I32_MAX-1)
+unsigned long rb_big2ulong_pack _((VALUE x));
 
-static I32
+static unsigned long
 num2i32(x)
     VALUE x;
 {
-    long num = NUM2LONG(x);
-
-    if (num < I32_MIN || I32_MAX < num) {
-	rb_raise(rb_eRangeError, "integer %ld too big to convert to `I32'", num);
-    }
-    return (I32)num;
-}
-    
-#define U32_MAX 4294967295
-
-static U32
-num2u32(x)
-    VALUE x;
-{
-    unsigned long num = NUM2ULONG(x);
+    x = rb_to_int(x); /* is nil OK? (should not) */
 
-    if (U32_MAX < num) {
-	rb_raise(rb_eRangeError, "integer %ld too big to convert to `U32'", num);
+    if (FIXNUM_P(x)) return FIX2LONG(x);
+    if (TYPE(x) == T_BIGNUM) {
+	return rb_big2ulong_pack(x);
     }
-    return (U32)num;
+    rb_raise(rb_eTypeError, "cannot convert %s to `integer'", rb_obj_classname(x));
+    return 0;			/* not reached */
 }
 
-#  define NUM2I32(x) num2i32(x)
-#  define NUM2U32(x) num2u32(x)
-# endif
-#endif
-
 #if SIZEOF_LONG == SIZE32 || SIZEOF_INT == SIZE32
 # define EXTEND32(x) 
 #else
@@ -704,7 +673,7 @@ pack_pack(ary, fmt)
 		char c;
 
 		from = NEXTFROM;
-		c = NUM2I32(from);
+		c = num2i32(from);
 		rb_str_buf_cat(res, &c, sizeof(char));
 	    }
 	    break;
@@ -715,7 +684,7 @@ pack_pack(ary, fmt)
 		short s;
 
 		from = NEXTFROM;
-		s = NUM2I32(from);
+		s = num2i32(from);
 		rb_str_buf_cat(res, OFF16(&s), NATINT_LEN(short,2));
 	    }
 	    break;
@@ -726,7 +695,7 @@ pack_pack(ary, fmt)
 		long i;
 
 		from = NEXTFROM;
-		i = NUM2I32(from);
+		i = num2i32(from);
 		rb_str_buf_cat(res, OFF32(&i), NATINT_LEN(int,4));
 	    }
 	    break;
@@ -737,7 +706,7 @@ pack_pack(ary, fmt)
 		long l;
 
 		from = NEXTFROM;
-		l = NUM2I32(from);
+		l = num2i32(from);
 		rb_str_buf_cat(res, OFF32(&l), NATINT_LEN(long,4));
 	    }
 	    break;
@@ -758,7 +727,7 @@ pack_pack(ary, fmt)
 		unsigned short s;
 
 		from = NEXTFROM;
-		s = NUM2I32(from);
+		s = num2i32(from);
 		s = NATINT_HTONS(s);
 		rb_str_buf_cat(res, OFF16(&s), NATINT_LEN(short,2));
 	    }
@@ -769,7 +738,7 @@ pack_pack(ary, fmt)
 		unsigned long l;
 
 		from = NEXTFROM;
-		l = NUM2I32(from);
+		l = num2i32(from);
 		l = NATINT_HTONL(l);
 		rb_str_buf_cat(res, OFF32(&l), NATINT_LEN(long,4));
 	    }
@@ -780,7 +749,7 @@ pack_pack(ary, fmt)
 		unsigned short s;
 
 		from = NEXTFROM;
-		s = NUM2I32(from);
+		s = num2i32(from);
 		s = NATINT_HTOVS(s);
 		rb_str_buf_cat(res, OFF16(&s), NATINT_LEN(short,2));
 	    }
@@ -791,7 +760,7 @@ pack_pack(ary, fmt)
 		unsigned long l;
 
 		from = NEXTFROM;
-		l = NUM2I32(from);
+		l = num2i32(from);
 		l = NATINT_HTOVL(l);
 		rb_str_buf_cat(res, OFF32(&l), NATINT_LEN(long,4));
 	    }

In This Thread

Prev Next