mbc_enc_len()

mbc_enc_len(UChar* p)が、文字列の終了位置を引数で渡していないので、文字のバイト列が途中で切れているときに問題を起こすのではないか、という件について説明しておきます。
終了位置をチェックしていないのは意図的です。かなり前にruby-devで、utf-8のバイト列が一文字を構成していない場合に落ちると指摘されました。そのときにチェックするように変更しようかと考えましたが、多少でも速度が低下するのを恐れて、チェックしないという仕様にしました。以前からドキュメントの中の最後の「問題点」にも書いています。
(http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt)

従って鬼車に渡される文字列は、一文字を完成していない不完全なバイト列は含まない、ことが条件です。このチェックが必要ならアプリケーション側が行うべきです。実際、同じ対象文字列を何度も検索するような場合には、検索処理の中で毎回チェックするのは無駄です。