Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

正規表現キーワードのインポートで許容サイズを超える文字列を無駄にコピーしているのを修正する #1244

14 changes: 10 additions & 4 deletions sakura_core/typeprop/CImpExpManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -661,21 +661,27 @@ bool CImpExpRegex::Import( const wstring& sFileName, wstring& sErrMsg )
}
if( k != -1 ) /* 3文字カラー名からインデックス番号に変換 */
{
if( 0 < MAX_REGEX_KEYWORDLISTLEN - keywordPos - 1 ){
// pKeywordに書き込める上限サイズ(NUL終端分を含む)
const size_t cchAvailableSize = std::min<size_t>( MAX_REGEX_KEYWORDLEN, MAX_REGEX_KEYWORDLISTLEN - 1 - keywordPos );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

変数名とコメントが嘘です。MAX_REGEX_KEYWORDLEN は pKeyword からくる制約ではありません。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

符号なし整数に負の値を設定しようとするケースがあります。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

符号なし整数に負の値を設定しようとするケースがあります。

考えてなかったです。


// 書き込み上限を指定して文字列コピーし、処理結果を受け取る
auto ncpyResult = ::wcsncpy_s( &pKeyword[keywordPos], cchAvailableSize, p, _TRUNCATE );
if( ncpyResult == 0 ){
regexKeyArr[count].m_nColorIndex = k;
wcsncpy_s( &pKeyword[keywordPos], MAX_REGEX_KEYWORDLISTLEN - keywordPos, p, _TRUNCATE );
count++;
keywordPos += wcsnlen( &pKeyword[keywordPos], MAX_REGEX_KEYWORDLISTLEN - keywordPos ) + 1;
keywordPos += wcsnlen( &pKeyword[keywordPos], cchAvailableSize) + 1;
}else{
// L"キーワード領域がいっぱいなため切り捨てました。"
sErrMsg = LS(STR_IMPEXP_REGEX2);
}
}
}else{
// L"不正なキーワードを無視しました。"
sErrMsg = LS(STR_IMPEXP_REGEX3);
}
}
}
pKeyword[keywordPos] = L'\0';
pKeyword[keywordPos] = L'\0'; // 2個目のNUL終端を書き込む
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

必ずしも2個目ではありません。


in.Close();

Expand Down