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

Wnd_GetText が一文字取りこぼす問題に対処 #1528

Merged
merged 1 commit into from
Feb 4, 2021

Conversation

kengoide
Copy link
Member

@kengoide kengoide commented Feb 3, 2021

PR の目的

#1525 で報告された問題に対処します。

カテゴリ

  • プログラムの動作上の問題

仕様・動作説明

問題の箇所は GetWindowTextLengthW で必要文字長を取得し、必要分のバッファを確保して、 GetWindowTextW にバッファ長を渡しているところです。

ここで問題になるのが API が扱う文字列長にnull文字を含むものと含まないものが混在していることで、GetWindowTextLengthW が返すのはnull文字を含まない長さですが、GetWindowTextW はnull文字を含めた長さを要求するので、どこかで1を足さなければ結果の文字列が1文字不足します。

提案する修正では basic_string::capacity() に1を足して GetWindowTextW に渡します。data() + size() にnullを書き込む操作を行いますが、C++17 では安全です。

PR の影響範囲

ApiWrap::Wnd_GetText を利用しているすべての箇所で挙動が変わります。

テスト内容

#1525 を参照してください。

関連 issue, PR

#1439

@AppVeyorBot
Copy link

Build sakura 1.0.3420 completed (commit 1bab43a975 by @k-kagari)

@kengoide
Copy link
Member Author

kengoide commented Feb 3, 2021

テストを書いてようやく気が付きましたが、問題が起きるのは GetWindowTextLengthW の結果が basic_string::capacity と同じ値だった場合に限られます。display がダメだったのは MSVC の basic_string の capacity のデフォルト値が7だからです。

発生条件が限られていたため今まで発覚しなかったのでしょう。

@kengoide kengoide marked this pull request as draft February 3, 2021 12:43
@kengoide kengoide marked this pull request as ready for review February 3, 2021 13:12
@AppVeyorBot
Copy link

Build sakura 1.0.3421 completed (commit fd8966f248 by @k-kagari)

@kengoide kengoide added the 💩degradation🧻🚽 デグレ (前に動いていた機能が動かなくなった) label Feb 3, 2021
@sonarcloud
Copy link

sonarcloud bot commented Feb 4, 2021

Kudos, SonarCloud Quality Gate passed!

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

100.0% 100.0% Coverage
0.0% 0.0% Duplication

@AppVeyorBot
Copy link

Build sakura 1.0.3422 completed (commit 5f15d9a342 by @k-kagari)

@kengoide kengoide merged commit 757a5df into sakura-editor:master Feb 4, 2021
@kengoide
Copy link
Member Author

kengoide commented Feb 4, 2021

レビューありがとうございました。

@kengoide kengoide deleted the feature/fix-wnd-gettext branch February 4, 2021 12:42
@kengoide kengoide added the 🐛bug🦋 ■バグ修正(Something isn't working) label Mar 15, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛bug🦋 ■バグ修正(Something isn't working) 💩degradation🧻🚽 デグレ (前に動いていた機能が動かなくなった)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants