From: "U.Nakamura" Date: 2007-09-03T14:53:18+09:00 Subject: [ruby-dev:31722] Re: [BUG] non-initialized struct こんにちは、なかむら(う)です。 In message "[ruby-dev:31721] Re: [BUG] non-initialized struct" on Sep.03,2007 13:27:46, wrote: | In article <20070903113920.521D.USA@garbagecollect.jp>, | "U.Nakamura" writes: | | > しかし、そもそもStructじゃない物に対してrb_struct_s_members() | > を呼ぶというコードはどう考えてもバグってるわけで、そこで[BUG] | > が出るのもmarshal側でチェックすべきだというのも正当な考え方と | > いう気もします。 | | 私は Struct 以外で T_STRUCT を使うという話 (Range) を考えて | いるので、どう考えてもバグ、って程には感じないです。 この場合、「Structじゃないもの」は、えーと、Structの形をして ないもの、ということでお願いします。 # なんかうまく言葉に出来ない | あと、[ruby-dev:31718] のパッチは、TYPE(klass) としてますが、 | これはいつも T_CLASS なんではないかと思います。 脳が膿んでました。 if (rb_class_inherited_p(klass, rb_cStruct) != Qtrue) あたりになりますね。 しかしこれでもStructをdupったものが使われるとloadできなくなる からダメ、と。 話としては単純なんだけど意外と難しいですねえ。 もちろん、なかださんが言ったようにrb_struct_s_members()のrb_bug() をrb_raise()に変えれば一瞬で解決ですが... それでは。 -- U.Nakamura