プロジェクト

全般

プロフィール

Bug(バグ) #2228

完了

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

Minoru Takai さんが13年以上前に追加. 約9年前に更新.

ステータス:
Fixed(完了)
優先度:
Urgent(急いで)
担当者:
対象バージョン:
開始日:
2011-06-20
期日:
進捗率:

100%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

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 による処理停止)が表示されてしまう。


関連するチケット 2 (0件未完了2件完了)

コピー先 OpenPNE 3 - Backport(バックポート) #3785: sfImageGenerator(GD) で存在しない例外クラスが使われているFixed(完了)Chiharu Nakajima2015-03-03

操作
コピー先 OpenPNE 3 - Backport(バックポート) #3792: sfImageGenerator(GD) で存在しない例外クラスが使われているFixed(完了)Chiharu Nakajima2011-06-20

操作

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