Project

General

Profile

Backport(バックポート) #3792

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

Added by Chiharu Nakajima over 5 years ago. Updated over 5 years ago.

Status:
Fixed(完了)
Priority:
High(高め)
Target version:
Start date:
2011-06-20
Due date:
% Done:

100%


Description

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


Related issues

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

History

#1 Updated by Chiharu Nakajima over 5 years ago

  • Copied from Bug(バグ) #2228: sfImageGenerator(GD) で存在しない例外クラスが使われている added

#2 Updated by Chiharu Nakajima over 5 years ago

  • Status changed from New(新規) to Invalid(無効)

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

#3 Updated by Shinichi Urabe over 5 years ago

  • Status changed from Invalid(無効) to Pending Testing(テスト待ち)
  • % Done changed from 0 to 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 Updated by isao sano over 5 years ago

  • Status changed from Pending Testing(テスト待ち) to Pending Merge(マージ待ち)
  • Assignee set to Chiharu Nakajima
  • % Done changed from 70 to 80

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

マージお願いします。

#5 Updated by Shinichi Urabe over 5 years ago

  • Status changed from Pending Merge(マージ待ち) to Fixed(完了)
  • % Done changed from 80 to 100

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

Also available in: Atom PDF