Tomotaka SUWA
t-suw****@users*****
2006年 12月 9日 (土) 10:25:27 JST
諏訪です。
AquaSKK BETA utf8-1.2 をリリースしました。
▽追加・改善された機能
・特になし
▽不具合修正
・文字列のエンコード変換時に、バッファーオーバーランする不具合を修正
- * -
CppCFString::toCString 部分の diff は以下の通りです。
- int ratio = 3;
- do {
- if(buf) delete[] buf;
- buf = new char[len * ratio];
- ++ ratio;
- } while(!CFStringGetCString(cf_string, buf, len * ratio, encoding));
+ int bufsize = CFStringGetMaximumSizeForEncoding(len, encoding);
+ bufsize += 1; // for NULL terminator
+ buf = new char[bufsize];
+ CFStringGetCString(cf_string, buf, bufsize, encoding);
古いコードで ++ ratio している箇所が問題でした。この結果、
CFStringGetCString では『buf の実際のサイズ < bufsize』ということになり、
アロケートされていないエリアを踏んでしまいました。
今まで出なかったのが不思議といえば不思議です。
修正コードでは素直に CFStringGetMaximumSizeForEncoding を呼び出し、最大
のバッファサイズを確保するようにしました。
よろしくお願いします。
-- Tomotaka SUWA