[#39548] [Bug #2291] Net::FTPでソケットをオープンする前にbinary=を呼び出すと落ちる — Akira Matsuda <redmine@...>

Bug #2291: Net::FTPでソケットをオープンする前にbinary=を呼び出すと落ちる

10 messages 2009/10/27

[#39592] infinite recursive call to C function — Yusuke ENDOH <mame@...>

遠藤です。

17 messages 2009/10/30
[#39596] Re: infinite recursive call to C function — Yukihiro Matsumoto <matz@...> 2009/10/30

まつもと ゆきひろです

[#39599] Re: infinite recursive call to C function — Nobuyoshi Nakada <nobu@...> 2009/11/02

なかだです。

[#39601] Re: infinite recursive call to C function — Yukihiro Matsumoto <matz@...> 2009/11/02

まつもと ゆきひろです

[ruby-dev:39503] Re: [bug:trunk] invalid memory access in 100**900

From: Yusuke ENDOH <mame@...>
Date: 2009-10-17 08:29:35 UTC
List: ruby-dev #39503
遠藤です。

2009年10月17日9:01 Tanaka Akira <akr@fsij.org>:
> 以下のように、100**900 を計算すると変なところをアクセスするようです。

すみません、off-by-one エラーしてました。

Index: bignum.c
===================================================================
--- bignum.c	(revision 25382)
+++ bignum.c	(working copy)
@@ -1848,13 +1848,13 @@

     while (--hn && !vds[hn + ln]);
     h = bignew(hn += 2, 1);
-    MEMCPY(BDIGITS(h), vds + ln, BDIGIT, hn);
-    BDIGITS(h)[hn - 1] = 0;
+    MEMCPY(BDIGITS(h), vds + ln, BDIGIT, hn - 1);
+    BDIGITS(h)[hn - 1] = 0; /* margin for carry */

     while (--ln && !vds[ln]);
     l = bignew(ln += 2, 1);
-    MEMCPY(BDIGITS(l), vds, BDIGIT, ln);
-    BDIGITS(l)[ln - 1] = 0;
+    MEMCPY(BDIGITS(l), vds, BDIGIT, ln - 1);
+    BDIGITS(l)[ln - 1] = 0; /* margin for carry */

     *pl = l;
     *ph = h;

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread