Ver. 2.6.0.1 以下のメール送信で不具合が発見されました。
Ver. 2.6.0.1以下のa-blog cmsを利用したメール送信で、題名(subject)に余分なスペースが入ってしまう問題が発見されました。
対象
- a-blog cms Ver. 2.6.0.1 以下
- Subjectが ASCII文字コードで始まり、途中でマルチバイト文字が続く
例
「ABCあいうえお」 が 「ABC あいうえお」 に変換されてしまう。
対策
/php/Mail.php の 166行目付近の ”encode" メソッドと 363行目付近の "getHeader"メソッド を以下のように修正ください。
以下ソースでの修正箇所
- 2, 3行目
- 15 〜 21行目
- 39行目
- 47, 48行目
// 166行目付近 // function encode ( $str ) この行を削除 function encode ($str, $subject=false) // この行を追加 { $len = mb_strlen($str, 'UTF-8'); $encode = ''; $mbstack = array(); for ( $i=0; $len>$i; $i++ ) { $char = mb_substr($str, $i, 1, 'UTF-8'); $byte = strlen(bin2hex($char)); if ( 2 == $byte ) { if ( empty($mbstack) ) { // $encode .= $char; この行を削除 // 以下5行を追加 if ( $subject ) { $mbstack[] = $char; } else { $encode .= $char; } } else if ( !in_array($char, array(',', '@', '<', '>', '"', '(', ')')) ) { .... // 363行目付近 function getHeader ( ) { $data = ''; foreach ( $this->_headers as $field => $header ) { $line = ''; if ( !isset($header['values']) || !isset($header['params']) ) { continue; } $values = $header['values']; $params = $header['params']; $subject = $field === 'Subject'; // の行を追加 // field $line .= $field.':'; // values foreach ( $values as $i => $value ) { $line .= !empty($i) ? ' ,' : ' '; // $line .= $this->encode(strval($value)); この行を削除 $line .= $this->encode(strval($value), $subject); // この行を追加 }
この度はご迷惑をおかけしてしまい申し訳ございません。
今後ともa-blog cmsをお願い致します。