まつもと ゆきひろです

In message "Re: [ruby-dev:26966] Re: multiplying empty string"
    on Tue, 6 Sep 2005 22:02:48 +0900, Tanaka Akira <akr / m17n.org> writes:

|では文字列に含まれている文字がすべてメタキャラクタでない、つまり word
|の要素になる文字であれば危険はないかというと、そこで今回の空文字列につ
|いて疑問が浮かびます。
|
|$arg が空文字列でなかったとすれば、"echo $arg" で echo は引数をひとつ
|受け取ります。それに対し、$arg が空文字列だったとすれば、echo は引数を
|受け取りません。つまり、"echo $arg" において $arg が word になることを
|意図していたとすれば、空文字列も意図せざる影響を及ぼすことになります。
|
|この引数の有無の違いは、; でコマンドが二つに分かれるような変化に比べれ
|ば軽微なものですが、それでもあまり自明でない挙動の変化をもたらすことが
|あります。たとえば、人工的な例ではありますが、[ruby-dev:26907] であげ
|た "grep #{pat} #{file}" では、pat が空文字列であるときに引数がひとつ
|ずれ、file が grep の第一引数になって、標準入力から読むようになってし
|まいます。

丁寧に説明していただいたおかげで理解できたように思います。

|もし、空文字列に taint が伝播するのであれば、メタキャラクタを含む文字
|列と同様に空文字列の問題も防げるのではないかと感じるのですが、空文字列
|には taint が影響しないとすると、せっかく防げそうなのにもったいないなぁ、
|と思うわけです。

なるほど、同意できます。空文字列だからといってtaintを外すの
は止めにしましょう。