SigScheme開発録 (65)

バグ発見。

(+ 3333333333333333333333333333)
core dumped

scm_string2number -> ERR -> scm_format -> read_width -> scm_string2number -> ERR -> ...の無限ループでスタックを食い潰す。ERRで使われるformat系ではERRを引き起こす可能性の有る関数を使うとこのようなエラー処理の無限ループを発生する可能性が有るのではないでしょうか。解決策としては以下の3つぐらいを思い付く。

  • ERRでscm_formatを使わないようにする
  • scm_format内でERRを呼び出すような関数を使用しないようにする
  • エラー処理用のformatterを別途用意する

1番目はエラーメッセージの表現能力が落ちるし、3番目はコストが高そうな上に同じようなコードが増えそうなので嫌。2番目が良さそうだけど完全にチェックするのは難しそうな気がしている。どうしませうか。