まつもと ゆきひろです

In message "[ruby-list:37405] Re: Secure「ではない」script の書き方"
    on 03/03/24, Taku Nakajima <tnakajima / brain-tokyo.jp> writes:

|strscanでまさにそのような例を発見しました。同じようなことをしても標準
|のRegexpクラスでは汚染が伝染するのに、StringScannerでは伝染しません。

手元では伝染します。たぶん、あおきさんが最近対応してるのでは?

|私は最後の行でtrueが出てほしいと思うのですが、それが正しいかどうかは確
|信がありません。このような場合の指針のようなものはあるのでしょうか?

拡張ライブラリを書く人はできれば以下のことに留意してください。

  * 部分文字列を得る場合にはrb_str_substr()などを使う
    (strscanもそうすれば良かったのではないかと)

  * あるオブジェクトに基づいて別のオブジェクトを作るときには、
    OBJ_INFECT()を呼ぶように

  * グローバルな状態を変更するメソッドではrb_secure(4)を呼ぶ

  * ローカルな状態(インスタンス変数とか)を変更するメソッドで
    はselfがtaintでなければrb_secure(4)を呼ぶ。

    うーん、これを1ステップで行うマクロが欲しいか

|# ちなみに、amritaの拡張ライブラリでは今の所、一切taintを考慮していません。

オブジェクトの生成、操作をRubyが提供する関数で行っているなら
あまり問題はないんですけどねえ。