uim_get_default_im_name() の返り値の賞味期限
mlterm で日本語入力ができないので、いじってみてますよ。im_uim_new() (uim library を動的 load して初期化する関数) が失敗していて、
if( engine == NULL || strlen( engine) == 0) { engine = (char*)uim_get_default_im_name( kik_get_locale()) ; /* (1) */ } if( ! find_engine( engine , &encoding_name)) /* (2) */ { kik_error_printf( "%s: No such conversion engine.\n" , engine) ; /* (3) */ goto error ; }
という下りの、(1) では "anthy" という文字列が engine に代入されているのに、(3) ではゴミになっている。(2) は uim を複数回呼ぶ。この問題自身の原因はちょっとまだよくわかってないけど、uim_get_default_im_name() がちょっと気になった。uim_get_default_im_name() の呼出側は、返ってきたものを strdup() する必要があるんだろうか。それとも返ってきた address をそのまま使い続けていいんだろうか。何かの拍子に uim の側で解放されたり、上書きされたりする可能性は? "anthy" みたいな文字列なら別に最初から最後まで解放されないはずなので、大丈夫な気もするけど、ちょっと怖いなぁ。uim API reference どこ。古いのなら fdo にあったはずと思たら消えてた。