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

バックアップで詳細$0~$9指定を使いMAX_PATH近いパスを保存しようとすると落ちる不具合を修正 #1596

Merged
merged 3 commits into from Mar 20, 2021

Conversation

usagisita
Copy link
Contributor

@usagisita usagisita commented Mar 19, 2021

タイトルの通りです。

PR の目的

バックアップをしようとすると落ちる不具合の修正です。

カテゴリ

  • 不具合修正

PR の背景

異常終了は減らしたいです。

PR のメリット

バックアップで不用意に落ちなくなります。

PR のデメリット (トレードオフとかあれば)

特にないです。

仕様・動作説明

ソースコード上では、auto_strlcatによるコメントが書かれていましたが、この箇所でMAX_PATHを超えると、サクラエディタが強制終了することがあります。

PR の影響範囲

バックアップのファイル名作成の範囲でエラーになります。

テスト内容

テスト1

手順
「バックアップ」を有効にして「詳細設定」を選び「$0_back_long_long_name.*」等と入力します。
「指定フォルダに作成する」で「.\skrtmp」等とファイルに対して有効な260ぎりぎりのパスを入力しておきます。
C:\Users\abc\Documents\git\sakuratmp\test_long_path\long_245_path_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa012345\b.txt
などのファイルパスに対して、バックアップ作成を実行します。
「元ファイルのフォルダ+サブフォルダ」が有効なパスの場合で、
元ファイルのフォルダ+サブフォルダのパス+新ファイル名が260を超えると、バッファオーバーランが発生します。

パッチ適用後は、wcsncat_sで検出されて、エラー画面が正常に表示されるようになります。

関連 issue, PR

参考資料

@AppVeyorBot
Copy link

Build sakura 1.0.3570 completed (commit 9519101dc5 by @usagisita)

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

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

バックアップをしようとすると落ちる不具合の修正です。

これは、実際に落ちるんですかね?

バッファオーバーフローの嫌なところは、落ちるとは限らないところです。
実際に確実に落ちるのであればバッファオーバーフローではなく、パス長が _MAX_PATH を超過したことによるファイルオープン失敗などが原因ではないかと思います。

関数の使い方が誤っているのを修正 → 必ずしも動作確認不要。
関数の使い方を誤った結果で落ちる不具合を修正 → 動作確認必須。

手動の動作確認を要求するPRはレビューされない傾向にあります。

そして、不具合として修正するなら、明らかな誤字脱字を除いて原因を明確にすべきと思います。

@beru beru added the 🐛bug🦋 ■バグ修正(Something isn't working) label Mar 20, 2021
@beru
Copy link
Contributor

beru commented Mar 20, 2021

少し古いですが e25539b で動作確認してみました。Debug ビルドをデバッグ実行してテストしてみたところ開発環境の画面に Run-Time Check Failure #2 - Stack around the variable 'szPath' was corrupted. というメッセージが表示されました。落ちる現象は条件を満たしてないのか確認できませんでした。

beru
beru previously approved these changes Mar 20, 2021
Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

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

問題無いと思います。

Debug実行で動作確認しました。スタック破壊の不具合が無くなりました。

wcsncat_s の戻り値は 0 が成功という事で入力によっては 0 と STRUNCATE 以外の値が返る事もあるようですが、おそらくこの実装ではそういう入力は渡さないので扱わないで問題無いと思います。

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncat-s-strncat-s-l-wcsncat-s-wcsncat-s-l-mbsncat-s-mbsncat-s-l?view=msvc-160

Copy link
Contributor

@sanomari sanomari left a comment

Choose a reason for hiding this comment

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

Code Smell A 1 Code Smell

見落としました。

今回新たに作ったものだから対応するのが筋だと思います。

@sonarcloud
Copy link

sonarcloud bot commented Mar 20, 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

0.0% 0.0% Coverage
0.0% 0.0% Duplication

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

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

修正内容がif文の結合とポインタ値の比較相手をnullptrに直してるだけなのを見ました。

細かいことは気にしない方向でレビューするなら approve が妥当と思います。

@AppVeyorBot
Copy link

Build sakura 1.0.3577 completed (commit b9f244cee6 by @usagisita)

@AppVeyorBot
Copy link

Build sakura 1.0.3578 completed (commit aeb903920f by @usagisita)

@usagisita
Copy link
Contributor Author

確認ありがとうございます。
テストを兼ねてバックアップをオンにしていたら色々なところにバックアップフォルダと沢山のファイルができてました……
マージしようと思います。

@usagisita usagisita merged commit 10656a2 into sakura-editor:master Mar 20, 2021
@usagisita usagisita deleted the feature/fix_buffer_backup branch March 20, 2021 15:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛bug🦋 ■バグ修正(Something isn't working)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants