-
Notifications
You must be signed in to change notification settings - Fork 167
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
CGrepAgent::DoGrep のローカル変数初期化漏れ修正 #236
CGrepAgent::DoGrep のローカル変数初期化漏れ修正 #236
Conversation
他の C4701 については↓以外は自分目線で問題なさそう,程度しか見ていませんので,#225 を残す・閉じる は他の方の判断におまかせしたいと思います.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PRありがとうございます。
LGTMです。
Grep置換で「クリップボードから貼り付け」にして動かしてみましたが動作にも影響していないようです。
sakura_core/CGrepAgent.cpp
Outdated
@@ -231,7 +231,7 @@ DWORD CGrepAgent::DoGrep( | |||
if( bGrepPaste ){ | |||
// ��`�E���C�����[�h�\��t���͖��T�|�[�g | |||
bool bColmnSelect; | |||
bool bLineSelect; | |||
bool bLineSelect = false; | |||
if( !pcViewDst->MyGetClipboardData( cmemReplace, &bColmnSelect, GetDllShareData().m_Common.m_sEdit.m_bEnableLineModePaste? &bLineSelect: NULL ) ){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
参考ですが、このbLineSelect
は、SALで書くと _Out_writes_opt_ bool* bLineSelect
に渡すパラメータです。平たく言うと「出力パラメータなので初期化しなくてもいい」です。
呼び出されるメソッドの中
sakura/sakura_core/view/CEditView.cpp
Lines 2394 to 2400 in 5da6469
bool CEditView::MyGetClipboardData( CNativeW& cmemBuf, bool* pbColumnSelect, bool* pbLineSelect /*= NULL*/ ) | |
{ | |
if(pbColumnSelect) | |
*pbColumnSelect = false; | |
if(pbLineSelect) | |
*pbLineSelect = false; |
さらに呼び出されるメソッド
sakura/sakura_core/_os/CClipboard.cpp
Lines 269 to 282 in 5da6469
bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSelect, const CEol& cEol, UINT uGetFormat) | |
{ | |
if( !m_bOpenResult ){ | |
return false; | |
} | |
if( NULL != pbColumnSelect ){ | |
*pbColumnSelect = false; | |
} | |
if( NULL != pbLineSelect ){ | |
*pbLineSelect = false; | |
} | |
//矩形選択や行選択のデータがあれば取得 | |
if( NULL != pbColumnSelect || NULL != pbLineSelect ){ |
個人的に、初期化漏れパラメータはすっごく気になるんですけど、こういうこともあるようです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
参考ですが、このbLineSelectは、SALで書くと Out_writes_opt bool* bLineSelect に渡すパラメータです。平たく言うと「出力パラメータなので初期化しなくてもいい」です。
GetDllShareData().m_Common.m_sEdit.m_bEnableLineModePaste が FALSE の場合は
&bLineSelect が渡されないので初期化されないと思います。
テスト方法を共有していただけますか? |
その通りですね。
if( bGrepReplace ){ //←Grep置換ダイアログで「置換」
if( bGrepPaste ){ //←Grep置換ダイアログで「クリップボードから貼り付ける」にチェック GetDllShareData().m_Common.m_sEdit.m_bEnableLineModePaste の設定は クリップボードに入っているデータの種類によって動作を切り替えるかどうかの設定です。
ぼくが確認したのは変更前後のリリース版の挙動。 テストしないといけないのは変更前後のデバッグ版の挙動。 デバッグ版だとアサーションで止まるかも、ということに書いてから気付いた。 |
@berryzplus さん,テスト方法の共有ありがとうございます.
自分で直しといてなんですが,置換時におけるこの仕様って需要あるんでしょうか... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
対応内容については LGTM です
機能そのものの需要とか正当性とかについては別途議論ですかね~
…var_init CGrepAgent::DoGrep のローカル変数初期化漏れ修正
#225 の発端となった初期化漏れの修正です.
「ラインモード貼付けを可能にする」off 時は bLineSelect = false であるべきなので,そのように初期化.
ちなみ初期化の方法は↓に合わせています.
(どちらも,ダイアログボックスのテキストボックスにクリップボードのデータを貼り付ける動作)
sakura/sakura_core/cmd/CViewCommander_Search.cpp
Lines 868 to 875 in 5da6469