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