CakePHP 2.3.5 変更点
- 公式アナウンス
- セキュリティリリース
- XSS脆弱性の修正
- 詳細は、あとで公表されるようです。
- XSS脆弱性の修正
主な変更点
ドキュメント・テストケースの修正は除きます。時系列順です。
機能向上
Validation::money
$100.1 のような小数点1桁の表記を許容するようになった。以前は、$100.10 と小数点は2桁で揃えなければならなかったCakeEmail::_renderTemplates
テンプレートによるレンダリングの際、_wrap 関数による文字列の制限を追加- www.ietf.org/rfc/rfc2822.txt RFC 2822(対訳)インターネットメッセージの形式 - RFCの部屋 の 行の長さの制限(998文字)に適合するようになった。
The 998 character limit is due to limitations in many implementations which send, receive, or store Internet Message Format messages that simply cannot handle more than 998 characters on a line. Receiving implementations would do well to handle an arbitrarily large number of characters in a line for robustness sake. However, there are so many implementations which (in compliance with the transport requirements of [RFC2821]) do not accept messages containing more than 1000 character including the CR and LF per line, it is important for implementations not to create such messages. 998文字の限界は、単に、1行が998文字より多くを処理することができないインターネットメッセージフォーマットのメッセージを送り、受け取るか、記憶する多くの実装の中の制限によります。 実装を受けるのは、丈夫さ目的のために並んで任意に多くのキャラクタを扱うために順調でしょう。しかし、([RFC2821]のトランスポート必要条件に従って)、1行あたりCRとLFを含む1000文字より多くを含んでいるメッセージを受信しない多くの実装があり、実装としてそのようなメッセージを作成しないことは重要です。
Validation::$_pattern
「-」で始まるドメイン名を除外するようになった。- TextHelper::autoLinkUrls 「http://www.exmaple.com?product_id=123」(「?」の直前に「/」がないパターン)をリンクとして認識するようになった。
Hash::_matchToken
サブパターンに名前をつける正規表現の構文を (?P<name>pattern) 記法に修正したことで、古いPCREのバージョンを使用している際の互換性を向上- PHPバンドル版なら PHP 5.2.2 以降は問題ない
- 参考 CakePHP 2.2のHash::extract()はCentOS5/RHEL5系では使えない @ php-tips
- CentOS5/RHEL5系上での CakePHP を使用するハードルが下がったはず。
- 過去に多くの古いPERE に対するチケットがリジェクトされてきたので、今回取り込まれたのは驚き。
バグフィックス
PaginatorComponent::validateSort
自モデルのフィールドのみソート対象とするよう判定を強化。- メインのモデル(A)とリレーションのある他のモデル(B)にも同じフィールド名(name)をもっていた際、A コントローラー経由で、B.name のソートを指定した場合、ソートされないのを修正
bootstrap
Configure::write('App.encoding') を設定した場合、内部文字エンコーディングは変更されていたが、現在のマルチバイト正規表現用のエンコーディングが変更されていなかったのを修正FormHelper::postLink
form[name] が重複する可能性が低くなるよう変更- uniqid の第2引数に true を指定して、結果が一意になる可能性を高めまるよう変更。false の場合、同じマイクロ秒で同じ ID が生成されてしまう可能性があります。
- uniqid(mt_rand(), true) とか、mt_rand を含める実装はよく見かけるけど、uniqid(null, true) はどれくらい一意な ID を生成するのだろう。
DboSource
整数の範囲を超えるページ番号をリクエストされた際、科学的記法に変換されたりして、挙動が正しくなくなるのを修正- 文字列のキャストの処理に sprintf('%u', $value) を追加。符号なし整数を超える場合、0になる。
<?php var_dump('raw : ' . 2147483647); var_dump(sprintf('format : %u', 2147483647)); // -> string(19) "raw : 2147483647" // -> string(19) "format : 2147483647" var_dump('raw : ' . 2147483648); var_dump(sprintf('format : %u', 2147483648)); // -> string(19) "raw : 2147483648" // -> string(19) "format : 2147483648" var_dump('raw : ' . 4294967295); var_dump(sprintf('format : %u', 4294967295)); // -> string(19) "raw : 4294967295" // -> string(19) "format : 4294967295" var_dump('raw : ' . 4294967296); var_dump(sprintf('format : %u', 4294967296)); // -> string(19) "raw : 4294967296" // -> string(10) "format : 0" var_dump('raw : ' . 300000000000000000000000000000); var_dump(sprintf('format : %u', 300000000000000000000000000000)); // -> string(16) "raw : 3.0E+29" // -> string(10) "format : 0"
HttpException
クラスの定義をチェックする際、class_exists('HttpException', false) として、__autoload をコールしないよう変更- pecl_http のインストールを考慮して、クラスの定義を確認するようにしていたが、Composer のようなオートローダーと相性が悪かった。
FormHelper::_initInputField
disabled
属性のチェックを強化CakeRequest::_base
rawurlencode が足りなかったのを追加