[#36071] サマータイムでのsleepの動作について — Yoshikawa <yoshixool@...>
吉川と申します。
こんにちは、なかむら(う)です。
吉川です。
こんにちは、なかむら(う)です。
久保です。
> 2008/9/2 U.Nakamura <usa@garbagecollect.jp>:
久保です。
こんにちは、なかむら(う)です。
[#36082] x86_64環境でMarshal.dumpの不具合 — Kouichi Ushijima <ushijima@...>
NTTレゾナントの牛島と申します。
[#36096] [ANN] Ruby 1.9.1仕様凍結 — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
成瀬です。
[#36124] [Bug: 1.9] undefined method `readpartial' for TestFileUtils::Stream — SASADA Koichi <ko1@...>
ささだです.
[#36132] [Feature #542] cgi.rb : CGI::unescape return encoding — Takeyuki Fujioka <redmine@...>
Feature #542: cgi.rb : CGI::unescape return encoding
In article <48be847681f43_55585b236f8341@redmine.ruby-lang.org>,
成瀬です。
藤岡です。
藤岡です。
In article <48C0C20E.4000307@rabbix.jp>,
藤岡です。
In article <48C76705.5000202@rabbix.jp>,
藤岡です。
In article <48C8A83E.8000200@rabbix.jp>,
藤岡です。
成瀬です。
藤岡です。
藤岡です。
藤岡です。
西山和広です。
藤岡です。
成瀬です。
藤岡です。
藤岡です。
西山和広です。
[#36147] GNU iconv dependency — Takahiro Kambe <taca@...>
こんにちは。
成瀬です。
In message <48C544C3.6090607@airemix.jp>
成瀬です。
In message <48C7D1E1.5040403@airemix.jp>
Takahiro Kambe wrote:
In message <48C7EC6B.5060306@airemix.jp>
Takahiro Kambe wrote:
In message <48C7F8DD.7060001@airemix.jp>
成瀬です。
In message <48C7FE1B.1050900@airemix.jp>
Takahiro Kambe wrote:
なかだです。
In message <48C95715.5080708@ruby-lang.org>
[#36167] OpenSSL Test Failure — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤です。
[#36174] [Feature #546] String#gsub と Strnig#scan のブロックパラメータの一致 — Motonori IWAMURO <redmine@...>
Feature #546: String#gsub と Strnig#scan のブロックパラメータの一致
[#36201] ソケット関連の定数がいろいろ未定義 (Re: [Bug #547](Closed) IPV6系の定数が未定義) — "IWAMURO Motonori" <deenheart+ruby@...>
岩室です。
岩室です。
[#36233] [Bug #554] Sync_m#sync_try_lockの引数が無視されている — akira yamada <redmine@...>
Bug #554: Sync_m#sync_try_lockの引数が無視されている
[#36245] [Feature #546] String#gsub と Strnig#scan のブロックパラメータの一致 — Yui NARUSE <redmine@...>
チケット #546 が更新されました。 (by Yui NARUSE)
[#36281] 合成文字の2コードポイント目 — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
In article <E1KeKG9-0004NC-Jb@x61.netlab.jp>,
まつもと ゆきひろです
In article <E1KeRWe-00037N-Vb@x61.netlab.jp>,
成瀬です。
In article <48CC86FD.3000409@airemix.jp>,
Tanaka Akira wrote:
In article <48CE068E.3080701@airemix.jp>,
成瀬です。
まつもと ゆきひろです
In article <E1KfNyE-0005XO-0P@x61.netlab.jp>,
まつもと ゆきひろです
In article <E1KfQYp-00032T-F6@x61.netlab.jp>,
まつもと ゆきひろです
In article <E1KfRzT-0004jm-DU@x61.netlab.jp>,
In article <87tzcg3dt2.fsf@fsij.org>,
At 21:44 08/09/18, Tanaka Akira wrote:
[#36290] adding Pathname#abspath() — "Akinori MUSHA" <knu@...>
SUSv3のrealpath(3)の項には、存在しないコンポーネントがあったら
名前が良くなかったですね。Pathname#resolve()でどうでしょうか。
In article <86wshfn0zl.knu@iDaemons.org>,
At Sun, 14 Sep 2008 23:20:56 +0900,
In article <86vdwxn9rh.knu@iDaemons.org>,
At Mon, 22 Sep 2008 12:43:18 +0900,
In article <86od2gcvvj.knu@iDaemons.org>,
At Wed, 24 Sep 2008 02:02:59 +0900,
In article <86ljxgd0jt.knu@iDaemons.org>,
At Fri, 26 Sep 2008 02:29:43 +0900,
田中さん、この件はどうでしょう。
In article <86tz7s28my.knu@iDaemons.org>,
At Wed, 21 Jan 2009 21:54:34 +0900,
In article <86sknc0y2o.knu@iDaemons.org>,
[#36300] [patch] performance improvement patch for benchmark/bm_so_count_words.rb — "masayoshi takahashi" <maki@...>
高橋征義です。
まつもと ゆきひろです
高橋征義です。
[#36325] mathn (#**) — Tadayoshi Funaba <tadf@...>
mahtn した場合、
けいじゅ@いしつかです.
> 消したのは [ruby-dev: 20780] からのスレッドなのですが, その中で消して
mathn の課題はそれはそれとして、1.9 ではこの場合、やはり mathn しなくて
[#36329] [Bug:1.9] emacs21で色が付かない — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#36336] [Bug #571] IPv6系の定数が未定義 (for 1.8) — Motonori IWAMURO <redmine@...>
Bug #571: IPv6系の定数が未定義 (for 1.8)
[#36346] add "Error" suffix for Encoding Exceptions — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。
成瀬です。
斎藤と申します。
遠藤です。
こんにちは、なかむら(う)です。
At 22:25 08/09/18, U.Nakamura wrote:
まつもと ゆきひろです
In article <E1KgbIm-00010I-Qi@x61.netlab.jp>,
成瀬です。
[#36349] Complex/image — Tadayoshi Funaba <tadf@...>
[ruby-math:00543] を読んで、image はやめて imag に変更したらどうか、つ
けいじゅ@いしつかです.
> imageとimagの件ですが, 現行では両方定義されているけど, imageは削除って
けいじゅ@いしつかです.
> Pythonは複素数リテラルあるみたいですね. そしたら, Rubyも分数リテラルと
[#36352] Temporarily removing Precision module — Yugui <yugui@...>
Yuguiです。
[#36448] [Feature #583] TmpdirとTempfile — Yuki Sonoda <redmine@...>
Feature #583: TmpdirとTempfile
[#36461] {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...>
Complex と Rational では、Unify が定義された場合、可能なら整数等に正規
まつもと ゆきひろです
> mathn.rbはcomplex.rbなどと同一の作者が同時に(一体として)作成
けいじゅ@いしつかです.
> まず, Unifyなしで動作するように, mathn側で対応させてください. それから,
けいじゅ@いしつかです.
> mathn動かなくなっていると思うので, あまり大丈夫ではありません.
けいじゅ@いしつかです.
> これらのメソッドを呼び出すのではなく, 再定義することによって振る舞いを
けいじゅ@いしつかです.
> 当然, mathnで対応することはできます.
けいじゅ@いしつかです.
> >それで、僕が改めて言うまでもないことですが、mathn は石塚さんの担当なの
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
Yuguiです。
けいじゅ@いしつかです.
Yuguiです。
こんにちは、なかむら(う)です。
[#36493] [Bug: 1.9] tmpdir on mswin32 — SASADA Koichi <ko1@...>
ささだです.
[#36505] 文字コード変換の追加 (悲鳴) — Martin Duerst <duerst@...>
http://redmine.ruby-lang.org/wiki/ruby/DevelopersMeeting20080922
[#36511] [Bug #595] Fiber ignores ensure clause — Koichi Sasada <redmine@...>
Bug #595: Fiber ignores ensure clause
[#36512] Encoding.default_internal のためのパッチ — Martin Duerst <duerst@...>
[ruby-core:18774] に Michael Selig から Encoding::default_internal
成瀬です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
Yukihiro Matsumoto さんは書きました:
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
At 14:58 08/09/25, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
In article <E1Kj3Iz-0003yT-HU@x61.netlab.jp>,
[#36528] driver and target of test-knownbug/btest-miniruby — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#36628] [IA-64]BigDecimal#sqrt の仕様 — TAKANO Mitsuhiro <takano32@...>
こんにちは
高野です。
まつもと ゆきひろです
高野です。
まつもと ゆきひろです
[#36631] net/pop.rb: APOPの脆弱性対応 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[ruby-dev:36091] Re: x86_64環境でMarshal.dumpの不具合
なかだです。
At Tue, 2 Sep 2008 00:41:51 +0900,
Shugo Maeda wrote in [ruby-dev:36086]:
> dump中にGCが発生すると、一時的に生成したBignumオブジェクトのアドレスが
> たまたま同じになってしまうため、arg->dataの検索時に誤って以前のオブジェクト
> にヒットしてリンクとして処理されてしまうようです。
> 他にもdump中に一時的にオブジェクトを生成している部分がもしあれば、同じよう
> な問題が発生しそうですね。
>
> 対応としてはarg->dataをHashにするとかでしょうか。
それでは解決しませんでした。
hashやeql?の再定義の影響を避けるためには、arg->dataのキーを
VALUEの値自体(INT2FIX(obj)など)にしなくてはなりませんが、そうす
るとマークの対象ではなくなってしまいます。
具体的には、test/ruby/marshaltest.rb:test_range_cyclicと両立させ
ることは不可能です。
もしかしたら、[ruby-dev:34312]もこれが原因かも知れませんねぇ。
# marshal.cでは r16761 もバックポートしたほうがいいと思います。
* gc.c (rb_mark_set): new function to mark keys.
* marshal.c (struct dump_arg, struct load_arg): added wrappers to mark
data entries. backport from trunk r13527,r13528,r13961,r16533.
[ruby-dev:36082]
Index: intern.h
===================================================================
--- intern.h (revision 19063)
+++ intern.h (working copy)
@@ -258,4 +258,5 @@ char *rb_source_filename _((const char*)
void rb_gc_mark_locations _((VALUE*, VALUE*));
void rb_mark_tbl _((struct st_table*));
+void rb_mark_set _((struct st_table*));
void rb_mark_hash _((struct st_table*));
void rb_gc_mark_maybe _((VALUE));
Index: gc.c
===================================================================
--- gc.c (revision 19063)
+++ gc.c (working copy)
@@ -735,4 +735,29 @@ rb_mark_tbl(tbl)
static int
+mark_key(key, value, lev)
+ VALUE key, value;
+ int lev;
+{
+ gc_mark(key, lev);
+ return ST_CONTINUE;
+}
+
+static void
+mark_set(tbl, lev)
+ st_table *tbl;
+ int lev;
+{
+ if (!tbl) return;
+ st_foreach(tbl, mark_key, lev);
+}
+
+void
+rb_mark_set(tbl)
+ st_table *tbl;
+{
+ mark_set(tbl, 0);
+}
+
+static int
mark_keyvalue(key, value, lev)
VALUE key;
Index: marshal.c
===================================================================
--- marshal.c (revision 19063)
+++ marshal.c (working copy)
@@ -85,14 +85,4 @@ static ID s_dump_data, s_load_data, s_al
static ID s_getc, s_read, s_write, s_binmode;
-static void
-reentrant_check(obj, sym)
- VALUE obj;
- ID sym;
-{
- if (obj && RBASIC(obj)->klass) {
- rb_raise(rb_eRuntimeError, "%s reentered", rb_id2name(sym));
- }
-}
-
struct dump_arg {
VALUE obj;
@@ -101,4 +91,5 @@ struct dump_arg {
st_table *data;
int taint;
+ VALUE wrapper;
};
@@ -109,4 +100,25 @@ struct dump_call_arg {
};
+static void
+check_dump_arg(arg, sym)
+ struct dump_arg *arg;
+ ID sym;
+{
+ if (!DATA_PTR(arg->wrapper)) {
+ rb_raise(rb_eRuntimeError, "Marshal.dump reentered at %s",
+ rb_id2name(sym));
+ }
+}
+
+static void
+mark_dump_arg(ptr)
+ void *ptr;
+{
+ struct dump_arg *p = ptr;
+ if (!ptr)
+ return;
+ rb_mark_set(p->data);
+}
+
static VALUE
class2path(klass)
@@ -516,5 +528,5 @@ w_object(obj, arg, limit)
v = rb_funcall(obj, s_mdump, 0, 0);
- reentrant_check(arg->str, s_mdump);
+ check_dump_arg(arg, s_mdump);
w_class(TYPE_USRMARSHAL, obj, arg, Qfalse);
w_object(v, arg, limit);
@@ -526,5 +538,5 @@ w_object(obj, arg, limit)
v = rb_funcall(obj, s_dump, 1, INT2NUM(limit));
- reentrant_check(arg->str, s_dump);
+ check_dump_arg(arg, s_dump);
if (TYPE(v) != T_STRING) {
rb_raise(rb_eTypeError, "_dump() must return string");
@@ -671,5 +683,5 @@ w_object(obj, arg, limit)
}
v = rb_funcall(obj, s_dump_data, 0);
- reentrant_check(arg->str, s_dump_data);
+ check_dump_arg(arg, s_dump_data);
w_class(TYPE_DATA, obj, arg, Qtrue);
w_object(v, arg, limit);
@@ -704,7 +716,9 @@ dump_ensure(arg)
struct dump_arg *arg;
{
- if (RBASIC(arg->str)->klass) return 0; /* ignore reentrant */
+ if (!DATA_PTR(arg->wrapper)) return 0;
st_free_table(arg->symbols);
st_free_table(arg->data);
+ DATA_PTR(arg->wrapper) = 0;
+ arg->wrapper = 0;
if (arg->taint) {
OBJ_TAINT(arg->str);
@@ -773,5 +787,5 @@ marshal_dump(argc, argv)
if (rb_respond_to(port, s_binmode)) {
rb_funcall2(port, s_binmode, 0, 0);
- reentrant_check(arg.str, s_dump_data);
+ check_dump_arg(&arg, s_dump_data);
}
}
@@ -783,4 +797,5 @@ marshal_dump(argc, argv)
arg.data = st_init_numtable();
arg.taint = Qfalse;
+ arg.wrapper = Data_Wrap_Struct(rb_cData, mark_dump_arg, 0, &arg);
c_arg.obj = obj;
c_arg.arg = &arg;
@@ -800,9 +815,31 @@ struct load_arg {
long offset;
st_table *symbols;
- VALUE data;
+ st_table *data;
VALUE proc;
int taint;
+ VALUE wrapper;
};
+static void
+check_load_arg(arg, sym)
+ struct load_arg *arg;
+ ID sym;
+{
+ if (!DATA_PTR(arg->wrapper)) {
+ rb_raise(rb_eRuntimeError, "Marshal.load reentered at %s",
+ rb_id2name(sym));
+ }
+}
+
+static void
+mark_load_arg(ptr)
+ void *ptr;
+{
+ struct load_arg *p = ptr;
+ if (!ptr)
+ return;
+ rb_mark_tbl(p->data);
+}
+
static VALUE r_object _((struct load_arg *arg));
@@ -824,5 +861,5 @@ r_byte(arg)
VALUE src = arg->src;
VALUE v = rb_funcall2(src, s_getc, 0, 0);
- reentrant_check(arg->data, s_getc);
+ check_load_arg(arg, s_getc);
if (NIL_P(v)) rb_eof_error();
c = (unsigned char)FIX2INT(v);
@@ -905,5 +942,5 @@ r_bytes0(len, arg)
VALUE n = LONG2NUM(len);
str = rb_funcall2(src, s_read, 1, &n);
- reentrant_check(arg->data, s_read);
+ check_load_arg(arg, s_read);
if (NIL_P(str)) goto too_short;
StringValue(str);
@@ -968,5 +1005,5 @@ r_entry(v, arg)
struct load_arg *arg;
{
- rb_hash_aset(arg->data, INT2FIX(RHASH(arg->data)->tbl->num_entries), v);
+ st_insert(arg->data, arg->data->num_entries, (st_data_t)v);
if (arg->taint) OBJ_TAINT(v);
return v;
@@ -1024,12 +1061,13 @@ r_object0(arg, proc, ivp, extmod)
int type = r_byte(arg);
long id;
+ st_data_t link;
switch (type) {
case TYPE_LINK:
id = r_long(arg);
- v = rb_hash_aref(arg->data, LONG2FIX(id));
- if (NIL_P(v)) {
+ if (!st_lookup(arg->data, (st_data_t)id, &link)) {
rb_raise(rb_eArgError, "dump format error (unlinked)");
}
+ v = (st_data_t)link;
return v;
@@ -1256,5 +1294,5 @@ r_object0(arg, proc, ivp, extmod)
}
v = rb_funcall(klass, s_load, 1, data);
- reentrant_check(arg->data, s_load);
+ check_load_arg(arg, s_load);
r_entry(v, arg);
}
@@ -1280,5 +1318,5 @@ r_object0(arg, proc, ivp, extmod)
data = r_object(arg);
rb_funcall(v, s_mload, 1, data);
- reentrant_check(arg->data, s_mload);
+ check_load_arg(arg, s_mload);
}
break;
@@ -1307,5 +1345,5 @@ r_object0(arg, proc, ivp, extmod)
}
v = rb_funcall(klass, s_alloc, 0);
- reentrant_check(arg->data, s_alloc);
+ check_load_arg(arg, s_alloc);
}
else {
@@ -1322,5 +1360,5 @@ r_object0(arg, proc, ivp, extmod)
}
rb_funcall(v, s_load_data, 1, r_object0(arg, 0, 0, extmod));
- reentrant_check(arg->data, s_load_data);
+ check_load_arg(arg, s_load_data);
}
break;
@@ -1366,5 +1404,5 @@ r_object0(arg, proc, ivp, extmod)
if (proc) {
rb_funcall(proc, s_call, 1, v);
- reentrant_check(arg->data, s_call);
+ check_load_arg(arg, s_call);
}
return v;
@@ -1389,6 +1427,9 @@ load_ensure(arg)
struct load_arg *arg;
{
- if (RBASIC(arg->data)->klass) return 0; /* ignore reentrant */
+ if (!DATA_PTR(arg->wrapper)) return 0;
st_free_table(arg->symbols);
+ st_free_table(arg->data);
+ DATA_PTR(arg->wrapper) = 0;
+ arg->wrapper = 0;
return 0;
}
@@ -1432,5 +1473,8 @@ marshal_load(argc, argv)
arg.src = port;
arg.offset = 0;
- arg.data = 0;
+ arg.symbols = st_init_numtable();
+ arg.data = st_init_numtable();
+ arg.proc = 0;
+ arg.wrapper = Data_Wrap_Struct(rb_cData, mark_load_arg, 0, &arg);
major = r_byte(&arg);
@@ -1447,9 +1491,5 @@ marshal_load(argc, argv)
}
- arg.symbols = st_init_numtable();
- arg.data = rb_hash_new();
- RBASIC(arg.data)->klass = 0;
- if (NIL_P(proc)) arg.proc = 0;
- else arg.proc = proc;
+ if (!NIL_P(proc)) arg.proc = proc;
v = rb_ensure(load, (VALUE)&arg, load_ensure, (VALUE)&arg);
RBASIC(arg.data)->klass = rb_cHash;
Index: test/ruby/test_marshal.rb
===================================================================
--- test/ruby/test_marshal.rb (revision 19063)
+++ test/ruby/test_marshal.rb (working copy)
@@ -13,9 +13,15 @@ class TestMarshal < Test::Unit::TestCase
def encode(o)
+ stress, GC.stress = GC.stress, true
Marshal.dump(o)
+ ensure
+ GC.stress = stress
end
def decode(s)
+ stress, GC.stress = GC.stress, true
Marshal.load(s)
+ ensure
+ GC.stress = stress
end
Index: test/ruby/marshaltestlib.rb
===================================================================
--- test/ruby/marshaltestlib.rb (revision 19063)
+++ test/ruby/marshaltestlib.rb (working copy)
@@ -194,4 +194,10 @@ module MarshalTestLib
end
+ def test_fixnum_64bit
+ obj = [1220278665, 1220278662, 1220278661, 1220278661, 1220278656]
+
+ marshal_equal(obj)
+ end
+
def test_float
marshal_equal(-1.0)
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦