引数sがそのまま戻り値になりそうなシーケンスでは s.dup するのが無難そうですね。
面倒なら頭で s=s.dup しちゃうとか。
メソッドの仕様だと言い張って呼び出し側でdup的な事をさせるのはさすがに論外な気がしてきた。

参考になる意見ありがとうございました。