プロジェクト

全般

プロフィール

Backport(バックポート) #3792

sfImageGenerator(GD) で存在しない例外クラスが使われている

Chiharu Nakajimaほぼ9年前に追加. ほぼ9年前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
対象バージョン:
開始日:
2011-06-20
期日:
進捗率:

100%


説明

Overview

定義されていないクラス sfRuntimeException が sfImageGenerator クラス内で使われている。

  • plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGenerator.class.php
  • plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorGD.class.php

History

  • master ブランチに問題のコードが含まれたコミット : 110行目
    plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGenerator.class.php
    103-  public function output($outputFilename)
    104-  {
    105-    if (!is_dir(dirname($outputFilename)))
    106-    {
    107-      $currentUmask = umask(0000);
    108-      if (false === @mkdir(dirname($outputFilename), 0777, true))
    109-      {
    110:        throw new sfRuntimeException('Failed to make cache directory.');
    111-      }
    112-      umask($currentUmask);
    113-    }
    114-
    115-    if ($this->doSave($outputFilename, $this->format, $this->quality))
    116-    {
    117-      return file_get_contents($outputFilename);
    118-    }
    119-
    120-    return false;
    121-  }
    
  • 上記のコミット以前に、問題のコードが含まれたコミット
    • http://trac.openpne.jp/changeset/12951
    • OpenPNE-3.1.3 時点で、 sfImageGeneratorGD クラスが配置されている
      • しかし、このコミットは svn:externals を外して、SVN管理下にソースを移動しているだけである
  • 上記のコミット以前に、 externals 先のファイルに問題のコードが含まれたコミット

Way to fix

近い名前の例外クラスには

  • sfException
  • RuntimeException
  • opRuntimeException

がある。

  • plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGenerator.class.php
  • plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorGD.class.php

このクラスファイルは OpenPNE に依存したものではなく、当該の例外は、実行時の例外を知らせるものであると読み取れる。つまり本来書くべきクラス名は RuntimeException であると思われる。当該部分の例外クラス名を sfRuntimeException から RuntimeException に修正する。

Versions

http://trac.openpne.jp/changeset/10244 このコミット以降の全ての OpenPNE 3系。

OpenPNE-3.2 or earlier, 3.4, 3.6, master.

Influence

この例外が本来投げられるタイミングで、未定義である sfRuntimeException を使用しようとしたために Fatal Error が発生する。そのタイミングとは、

  • サーバ側に画像のキャッシュファイルが生成される時(サーバ側のキャッシュがないときにブラウザから画像を表示するなど)に、
  • 画像のキャッシュファイルを作成するディレクトリ(web/cache/img/*)が存在せず、
  • そのディレクトリ(web/cache/img/*)を新規作成しようとしたときに作成できない場合(*1)

である。 web/cache に書き込み権限がない場合などには(*1)を満たすため、比較的容易に当該箇所の処理を行わせようとする(Fatal Error を発生させる)ことができる。

そのような場合に画像のURLに直接アクセスすると、本来ユーザに表示されるべきではない真っ白な画面(Fatal Error による処理停止)が表示されてしまう。


関連するチケット

コピー元 OpenPNE 3 - Bug(バグ) #2228: sfImageGenerator(GD) で存在しない例外クラスが使われている Fixed(完了) 2011-06-20

履歴

#1 Chiharu Nakajimaほぼ9年前に更新

  • コピー元 Bug(バグ) #2228: sfImageGenerator(GD) で存在しない例外クラスが使われている を追加

#2 Chiharu Nakajimaほぼ9年前に更新

  • ステータスNew(新規) から Invalid(無効) に変更

3.8系ではsfImageHandlerPluginを使用していないため、取り込み不要。

#3 Shinichi Urabeほぼ9年前に更新

  • ステータスInvalid(無効) から Pending Testing(テスト待ち) に変更
  • 進捗率0 から 70 に変更

3.8 においても sfImageHandlerPlugin は存在します lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGenerator.class.php
3年前の master に取り込みされた修正がそのまま、3.8にも適用されています https://redmine.openpne.jp/projects/op3/repository/revisions/5b1c8d4a6ce15463d6700ded9fb0487709e6c617

レビューOK

#4 isao sanoほぼ9年前に更新

  • ステータスPending Testing(テスト待ち) から Pending Merge(マージ待ち) に変更
  • 担当者Chiharu Nakajima にセット
  • 進捗率70 から 80 に変更

https://redmine.openpne.jp/issues/2228#note-9
にある通りテストは行いません。

マージお願いします。

#5 Shinichi Urabeほぼ9年前に更新

  • ステータスPending Merge(マージ待ち) から Fixed(完了) に変更
  • 進捗率80 から 100 に変更

過去にマージ済みのため、マージ作業は不要

他の形式にエクスポート: Atom PDF