プロジェクト

全般

プロフィール

Backport(バックポート) #2477

PHP 5.3.4 以降の場合に画像付きメール投稿が失敗する

Minoru Takai12年以上前に追加. 12年以上前に更新.

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

100%


説明

概要

この問題は #2261 の対応中に発見されました。この問題 http://redmine.openpne.jp/issues/2261#note-5 については本チケットで扱います。

PHPのバージョンが新しいとき(この意味は以下を参照)、メール投稿において画像を添付すると(添付画像の個数は任意)添付画像が受け付けられない。

PHPのバージョンと base64_decode() の挙動/RFC3548

最後に改行が余分に入ったbase64エンコードデータをstrict modeで処理した場合の挙動をPHP 5.2.17, 5.3.0〜5.3.6の各バージョンで調べたところ、5.3.4 以降で FALSE が返るようになっていました。

PHP 5.3.4 (see http://php.net/ChangeLog-5.php#5.3.4 ) において、base64_decode() 関連で修正があったようです。(Base64について定義しているRFC3548に厳格に従うよう修正されたということでしょうか)
http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/base64.c?r1=305779&r2=305778&pathrev=305779
http://www.ietf.org/rfc/rfc3548.txt

原因

最新のPHPにおいて、base64_decode() を strictモード(第2引数をtrue)で使うとmultipartから取得した画像データ(base64-encoded text)の末尾に改行が余分に含まれていると FALSE を返す。添付画像は application/x-empty とみなされ画像とはみなされず無視される。

修正方法

base64_decode($content, true); の箇所を base64_decode(rtrim($content), true); に変更する。


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #2476: PHP 5.3.4 以降の場合に画像付きメール投稿が失敗する Fixed(完了) 2011-10-06

関係しているリビジョン

リビジョン 6438b510 (差分)
Minoru Takai12年以上前に追加

Removes the last line feed in the base64-encoded data before passing it to base64_decode($data, true). (fixes #2477, BP from #2476 and #2261)

履歴

#1 Minoru Takai12年以上前に更新

stable-3.6.x ブランチでは以下のような差分になるかと思います。

diff --git a/lib/util/opMailMessage.class.php b/lib/util/opMailMessage.class.php
index 3da417a..70e4b91 100644
--- a/lib/util/opMailMessage.class.php
+++ b/lib/util/opMailMessage.class.php
@@ -75,7 +75,7 @@ class opMailMessage extends Zend_Mail_Message
         $tmppath = tempnam(sys_get_temp_dir(), 'IMG');

         $fh = fopen($tmppath, 'w');
-        fwrite($fh, base64_decode($part->getContent(), true));
+        fwrite($fh, base64_decode(rtrim($part->getContent()), true));
         fclose($fh);

         $images[] = array(

#2 Minoru Takai12年以上前に更新

  • 担当者Yuya Watanabe から Minoru Takai に変更

対応します。

#3 Minoru Takai12年以上前に更新

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

更新履歴 6438b510dae18973e0c1da2dbc422f5ff79df1e3 で適用されました。

#4 Kousuke Ebihara12年以上前に更新

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

#5 Mutsumi Imamura12年以上前に更新

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

動作確認しました。OKです。

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