mbc_enc_len() (5)
ソースコードは読んだつもりですが、 チェックする関数を作る方法は分かりませんでした。
方法は、xxx_mbc_enc_len()に文字列の終了位置を引数に追加した形の関数を新しく作ります。その中で参照するバイトの位置が文字列の範囲に収まっているか、文字の終了位置が文字列の終了位置に収まっているかをチェックして、エラーを返せるようにします。
今は、範囲外のバイト値のチェックをしていませんが、チェックしたければそれも追加します。チェックしないのであれば、xxx_mbc_enc_len()と同じ長さを返します。
その関数をアプリケーションから呼び出して、文字列全体のチェックをします。
将来、何らかの手段を提供するようにします。
どういう方法になるか、いつになるかについては全くわかりませんが。
当初はmbc_to_codeした結果をcode_to_mbclenして ゼロが返らないことをチェックするのかと思いましたが、 一番問題が起きそうなgb18030ではバイト列が壊れていても code_to_mbclenはゼロを返さないようです。
チェックしていませんから。
前に以下のように書きました。
そもそも、鬼車のエンコーディング部分は、 正規表現ライブラリの実装に必要なものを 提供しているだけの「おまけ」ですから、 m17nの実装に利用しようとすること自体が間違いです。
しかし、松本さんにとっては安心して使えないものだということのようですので、使わないようにお願いします。
コメントも、これで終わりにして頂きたいと思います。