-
Notifications
You must be signed in to change notification settings - Fork 165
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
構造体比較にmemcmpを使うのをやめる #877
構造体比較にmemcmpを使うのをやめる #877
Conversation
構造体の比較でmemcmpを使うと、構造体内のパディング部分の差異で等価判断を正しく行えなくなる恐れがある。 構造体に比較演算子を定義して、有効なメンバだけを比較するように変更する。
期待した感じにリンクが作れなかったので貼り直し。 GitHub |
物理的に同じ構造体を比較した場合の判定をショートカットできるようにthis == &rhsの判定を追加。
あと、単体テストの実装お願いできますか? |
変更しない引数にはconst修飾を付けるべきだが付けていなかった。 この変更を適用しておかないと定数との比較ができない。 単体テスト作成中に発見した凡ミス修正。
単体テスト。書いてみたのはいいんだけど、CodeFactorが警告を発している・・・。 等価演算子/否定の等価演算子のテストなので、 数値型のテキトーな値といえばmin/maxなわけで、 |
Ignoreしました。 |
何をするテストかのコメントがあってわかりやすいです。
|
ふむ。Release版の単体テストが失敗しておる・・・。
この条件を証明するために、アクセスしてよいメモリ領域とアクセスしてはならないメモリ領域が連続して配置されるように api でゴリゴリして、「アクセスしてはならないメモリ領域にアクセスしました!」という例外(=一般保護違反、セグメンテーションフォールト)を意図的に発生させるようなテストを書いた。
エラーメッセージは、死亡想定のアクセス違反コードでセグフォールトが発生しなかった、と取れる内容。とりあえず、このままはマズい・・・。 |
失敗する原因が不明なので当面は実行しないように対策する。
分かってそうだったのであえてスルーしました。 状況的に中間値付近のテストがどうしても必要と考えているように見えてるんですけど、やっぱり欲しいですか? |
いえ、不要です。 |
時間がかかりそうなら、チケットだけ作っておいて後回しでもいいです。 |
対処は完了しています。 ⇒ c0d02c5 (MSVCリリース版ではテストを実行しない チェック結果が × になってるのはCodeFactorのせいです。 |
レビューありがとうございます。 |
#877 で導入した単体テストで DISABLED テストを実装
…ts_MyDEVMODE_equals 構造体比較にmemcmpを使うのをやめる
…ch-test-count sakura-editor#877 で導入した単体テストで DISABLED テストを実装
目的
SonarQube導入PRのレビューで実験的に行った修正を適用します。
SonarQubeの指摘内容
https://sonarcloud.io/project/issues?id=sakura-editor_sakura&open=AWnxcxsuO9B58BDk-CUh&resolved=false&types=BUG
修正内容
構造体の比較でmemcmpを使うと、構造体内のパディング部分の差異で等価判断を正しく行えなくなることがあります。構造体に比較演算子を実装して、比較演算が正しく行われるようにします。
このPRに関しての備考
同種の指摘を全部つぶしにいこう、という意図ではありません。
せっかく修正したしもったいないから入れとこう程度の認識です。