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

外部コマンド実行でキャンセルした時のメッセージが異なる問題を修正 #1721

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
レビュー指摘対応
  • Loading branch information
beru committed Aug 29, 2021
commit d0d63b777ad7ca9e77fb061ff3c401e61a2f10ef
2 changes: 1 addition & 1 deletion sakura_core/view/CEditView_ExecCmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ bool CEditView::ExecCmd( const WCHAR* pszCmd, int nFlgOpt, const WCHAR* pszCurDi
if( bCancelEnd && bOutputExtInfo ){
// 2006.12.03 maru アウトプットウィンドウにのみ出力
//最後にテキストを追加
oa.OutputW( CLoadString().LoadStringW(STR_EDITVIEW_EXECCMD_STOP) );
oa.OutputW( CLoadString().LoadString(STR_EDITVIEW_EXECCMD_STOP) );
Copy link
Contributor

Choose a reason for hiding this comment

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

全く分からんです。

この直し方で修正するってことは、他にも「直さないといけない箇所」がたくさん出てきそうで、影響調査とかめんどいです。

oa.OutputW()の呼出し箇所すべてで考慮が必要ですよね?

渡された引数の内容を処理完了までキープしておく責任があるのは呼ばれた側のような気がします。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

oa.OutputW()の呼出し箇所すべてで考慮が必要ですよね?

呼び出し箇所で問題が起きそうかどうかの見極めは必要だと思います。

文字列リテラル等の定数値を渡している箇所については特に問題無いと思います。
スタック上の文字列領域もリエントラントなので多分大丈夫だと思います。
LSマクロはstatic記憶領域の変数を使う CLoadString::LoadStringSt の呼び出しになりリエントラントではなく問題が発生しました。

OutputW で Grep したところ他にLSマクロと組み合わせて使用している記述は見当たりませんでした。
なので多分大丈夫な気もしますが、考慮漏れで同様の問題が起きる可能性は否定出来ません。

まぁワニワニパニック大好きなのでその時はまたなんとかすれば良いと思います。変更をする事で不具合がたくさん追加されるとかだとさすがにまずいと思いますが。。

渡された引数の内容を処理完了までキープしておく責任があるのは呼ばれた側のような気がします。

それは一概に言い切れないケースバイケースだと思います。

bool COutputAdapterDefault::OutputW(const WCHAR* pBuf, int size)

こういうプロトタイプのメソッドの呼び出しですが、第1引数のポインタが指す領域の内容が変わる事は、少なくとも利用する呼ぶ側では意識しないと思います(なのでLSマクロのままにしたいんだと言われたら納得しちゃいそう)。呼ばれる側の実装でもなかなか意識しにくいので問題が生じうる実装になっているのではないかと。

Copy link
Contributor

Choose a reason for hiding this comment

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

影響確認実施済みなのは了解しました。
また、oa.OutputW()の呼ばれた側で対策するのがつらいのもなんとなく分かりました。

}

{
Expand Down