From: Minero Aoki Date: 2003-03-25T03:30:11+09:00 Subject: [ruby-list:37409] Re: Secure「ではない」script の書き方 あおきです。 In mail "[ruby-list:37407] Re: Secure「ではない」script の書き方" matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |strscanでまさにそのような例を発見しました。同じようなことをしても標準 > |のRegexpクラスでは汚染が伝染するのに、StringScannerでは伝染しません。 > > 手元では伝染します。たぶん、あおきさんが最近対応してるのでは? あ、そうでした。標準添付になるときにレポジトリでは 直したんですが、反映させるのを忘れてました。バラ配布のも 直しときます。 > 拡張ライブラリを書く人はできれば以下のことに留意してください。 > > * 部分文字列を得る場合にはrb_str_substr()などを使う > (strscanもそうすれば良かったのではないかと) いちおう別パッケージもあるという建前上、1.6 にないと使いづらい です。 これに限らず、1.6 と 1.8 両対応の拡張ライブラリを書くのは結構 気を遣いますよね。特に差が大きいのは次の二つでしたっけ。 * STR2CSTR() → StringValue() * rb_define_alloc_func() > * あるオブジェクトに基づいて別のオブジェクトを作るときには、 > OBJ_INFECT()を呼ぶように これなんですが、関数版の rb_obj_infect() が欲しいです。 マクロだと副作用が気になってコンストラクタと一緒に使えません。 # こういう感じで return rb_obj_infect(rb_str_slice(str,idx,len), self); ------------------------------------------------------------------- 青木峰郎