Skip to content

ファイルの公開期間外に設定するとフロントで500エラーになる不具合の修正#4475

Merged
ryuring merged 3 commits into
baserproject:5.3.xfrom
IwasakiRyuichi:5.3-fix722
Jul 23, 2026
Merged

ファイルの公開期間外に設定するとフロントで500エラーになる不具合の修正#4475
ryuring merged 3 commits into
baserproject:5.3.xfrom
IwasakiRyuichi:5.3-fix722

Conversation

@IwasakiRyuichi

Copy link
Copy Markdown
Collaborator

@ryuring

概要

アップロードファイル一覧で、画像の公開設定の開始日付を期間外にして、URLを別リンク(シークレットウィンドゥ)で開くと404ではなく500エラーになっておりました

原因

plugins/bc-uploader/src/Controller/UploaderFilesController.phpview_limited_file() で、公開期間かどうかを判定して$displayをtrue/falseにしています。falseの際に404にする使用ですが、$displayがtrueの場合に、最後に、new Stream(WWW_ROOT . 'files/uploads/limited/' . $filename)を呼び出していますが、ここでそのファイルが存在するかをチェックせずにファイルを読み出すためファイル読み込みでエラーが発生し、それが原因で500エラーになっておりました

修正内容

実ファイルのチェック処理を追加しました。

ご確認お願いします。

Comment on lines +57 to +59
if ($display && !file_exists(WWW_ROOT . 'files' . DS . 'uploads' . DS . 'limited' . DS . $filename)) {
$display = false;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@IwasakiRyuichi
debug=true では 404 になったので、new Stream のエラーでは無いと考えています。
またbcblogに関しても掲載期間を期間外にした場合はログイン有無に限らず「An Internal Server Error Occurred」が発生します。
そのため、より根本的な問題な気がします。

私の考えとしては以下です。

  1. UploaderFilesControllerが末尾でnotFoundメソッドを呼び出す
  2. 継承元のAppController.php のnotFoundメソッドは例外を呼び出す
  3. cakephpのコア処理がWebExceptionRenderer.phpが例外をキャッチしてしまい「An Internal Server Error Occurred」が発生する

確認したところ、cakephp 5.2.0になった際の仕様変更だと思います。
cakephp/cakephp#17958

BcErrorController.phpで、notFoundメソッドを継承してsetTemplateを呼び出すような形が適切だと考えていますがどうでしょうか

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

アップロードファイル(公開制限付き)の閲覧において、公開期間外などの条件で実ファイルが存在しない場合に Stream() で例外が発生して 500 になる問題を、ファイル存在チェック追加により 404 へフォールバックさせることを目的としたPRです。/files/uploads/* ルート経由でファイル配信を行う UploaderFilesController::view_limited_file() の安定性を改善します。

Changes:

  • 公開対象と判定された場合でも、実ファイルが存在しないケースを検知して 404 にする分岐を追加
  • (推奨)ワイルドカードルート入力をパス結合する箇所の安全性を高める余地(パストラバーサル/読み取り不可ファイル)

Comment on lines +57 to +59
if ($display && !file_exists(WWW_ROOT . 'files' . DS . 'uploads' . DS . 'limited' . DS . $filename)) {
$display = false;
}

@teratai3 teratai3 Jul 23, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

この修正は不要になったため対応なし
#4475 (comment)

Comment on lines +57 to +59
if ($display && !file_exists(WWW_ROOT . 'files' . DS . 'uploads' . DS . 'limited' . DS . $filename)) {
$display = false;
}

@teratai3 teratai3 Jul 23, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

この修正は不要になったため対応なし
#4475 (comment)

@IwasakiRyuichi

Copy link
Copy Markdown
Collaborator Author

@ryuring @teratai3

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

BcErrorController.phpの、notFoundのエラー用のテンプレートを呼び出す様に修正いたしました。
ご確認をお願いいたします。

@teratai3

teratai3 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@IwasakiRyuichi
ご対応ありがとうございます。動作確認でき私は問題ないと思います。
cakephpのコア側の仕様変更っぽいので分かりにくいし難しいですね...
(私は、すごくAIと壁打ちしました...)
ユニットテストがあまり分かっておらず、追加する必要があるかに関しては...後続のレビュワーの方にお任せします。

@ryuring

ryuring commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

@IwasakiRyuichi @teratai3 ありがとうございます。マージしますね。

@ryuring
ryuring merged commit 31cc5f5 into baserproject:5.3.x Jul 23, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants