zz log

zaininnari Blog

CakePHP 2.3.5 変更点

主な変更点

ドキュメント・テストケースの修正は除きます。時系列順です。

機能向上

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文字より多くを含んでいるメッセージを受信しない多くの実装があり、実装としてそのようなメッセージを作成しないことは重要です。

バグフィックス

  • 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 が足りなかったのを追加