[aquaskk-dev 65] utf8-1.2 リリース

Back to archive index

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



aquaskk-dev メーリングリストの案内
Back to archive index