プロジェクト

全般

プロフィール

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

操作

Youichi Kimura さんが約13年前に更新

  • 担当者Youichi Kimura にセット

Youichi Kimura さんが約13年前に更新

  • ステータスNew(新規) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 275ff4629d52c769ecc4987e22832e45330236e4 で適用されました。

Shouta Kashiwagi さんが12年以上前に更新

  • 対象バージョンOpenPNE 3.7.0 から 252 に変更

Youichi Kimura さんが12年以上前に更新

  • 優先度Normal(通常) から Urgent(急いで) に変更

Yuya Watanabe さんが12年以上前に更新

  • 3.6 で発生するかYes から Unknown (未調査) に変更
  • 3.4 で発生するかUnknown (未調査) にセット

修正内容自体は問題ないと思いますが,リリース時にどこにこのチケットのコミットが含まれるかが不明なため,リリースが行われるブランチ等,修正が反映されていることがわかる状態になるまでは「Pending Review」としておきます.

Shouta Kashiwagi さんが12年以上前に更新

  • 対象バージョン252 から OpenPNE 3.8beta1 に変更

Youichi Kimura さんが12年以上前に更新

更新履歴 5b1c8d4a6ce15463d6700ded9fb0487709e6c617 で適用されました。

Yuya Watanabe さんが12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

Yuma Sakata さんが12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

この部分に到達する場合、どちらにしろエラーで実行が停止されるため動作確認程度は必要かもしれないですが、テストは不要とのことです。

kaoru n さんが9年以上前に更新

Chiharu Nakajima さんが9年以上前に更新

kaoru n さんが約9年前に更新

  • 3.8 で発生するかUnknown (未調査) にセット

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