> |いや、それは違います。無駄に感じるのは、その後にループがあるからです。
> 
> それを含めても
> 
> 1    str2 = rb_str_new5(str,0, RSTRING(str)->len*len);
> 2    for (i=0; i<len; i++) {
> 3	memcpy(RSTRING(str2)->ptr+(i*RSTRING(str)->len),
> 4	       RSTRING(str)->ptr, RSTRING(str)->len);
> 5    }
> 6    RSTRING(str2)->ptr[RSTRING(str2)->len] = '\0';
> 7
> 8    OBJ_INFECT(str2, str);
> 9
> 10   return str2;
> 
> 1でstrのdereference
> 2でi<lenの比較1回(loopの中身は実行しない)
> 6でdereferenceが2回、代入が1回
> 8でフラグのコピー
> 
> ですから、差は無視できるのではないかと思います。むしろ、負の
> 数を通しちゃったりするほうがまずいように思えるのですが。
> taintの伝搬は長さ0なんだから気にしなくてもよいと思いますが。

あまりこだわる気もなくなってきて、しかも、かなりボケてきた自覚がでてき
たので、アレですが、self の長さが零でも、len (times) 分はループするわ
けですよね。