[ruby-talk:51506] に答えようと思って久しぶりに Ruby/KAKASI
を使ったら3点気づいたことがあります。以前、やまだあきらさん
からいただいたパッチを取り込み忘れていたというのもあるんです
が、それだけでは解決しない問題に当たってしまいまして、どうす
れば良いのか分かりません。
* FreeBSD では Ruby/KAKASI や Perl の Text::Kakasi で次のよ
うな warning が出ます。
% ruby -r kakasi -e '
Kakasi::kakasi("-ieuc -Ha", "\xa1\xb3")
'
ruby in free(): warning: junk pointer, too high to make sense
% perl -e '
use Text::Kakasi;
Text::Kakasi::getopt_argv("kakasi", "-ieuc", "-Ha");
Text::Kakasi::do_kakasi("\xa1\xb3");
'
perl in free(): warning: junk pointer, too high to make sense
%
こないだ出したリリースでは free(buf) を if(*buf){free(buf)}
とすることで黙らせたのですが、考え直してみると激しく間違った
対処である気がしています。
if(buf) で free(buf) を囲んでも変わりません。free(3) は以下
のようにいっているので、free(buf) は if(buf) で囲む必要はな
いはずです。
The free() function causes the allocated memory referenced by ptr to be
made available for future allocations. If ptr is NULL, no action occurs.
kakasi 本体にもバグを見つけたのですがこれも手つかずです。
* 次のようにすると kakasi 2.3.4 が core dump します。
% ruby -e 'print "\x8e\xe0"' | kakasi -ieuc -ka
* "\x80\xa0" などを kakasi -ieuc に食わすと "\x80\xa0\xff"
のように末尾に 0xff を補います。
ごとけん