2011年1月11日火曜日

PHPの浮動小数点処理に無限ループのバグ

PHPの浮動小数点処理に無限ループのバグ
http://slashdot.jp/developers/11/01/08/0527259.shtml

PHP5.2および5.3。
文字列"2.2250738585072011e-308"(304桁の10進数表記でも同様)からdoubleへの変換を、
PHPの32ビットプロセス上で実行した場合に無限ループする。。。

パッチ

メモ:addとaddAND(addOr)の違い

Criteriaでadd指定で条件を指定した場合
同一カラムに指定されていた条件が上書きされる

$c = new Criteria();
$c->add(TablePeer::COLUMN_ALPHA, 'hoge');
$c->add(TablePeer::COLUMN_BETA, 'piyo');
$c->add(TablePeer::COLUMN_BETA, 'foo');

WHERE column_alpha = 'hoge'
AND column_beta = 'foo'

※「column_beta = 'piyo'」の条件が「column_beta = 'foo'」で上書きされる


-------------------------------------------
addAnd(addOr)を使用すると指定されていた条件に対して追加される

$c = new Criteria();
$c->add(TablePeer::COLUMN_ALPHA, 'hoge');
$c->add(TablePeer::COLUMN_BETA, 'piyo');
$c->addAnd(TablePeer::COLUMN_BETA, 'foo');

WHERE column_alpha = 'hoge'
AND column_beta = 'piyo'
AND column_beta = 'foo'

※「column_beta = 'piyo'」の条件に「column_beta = 'foo'」が追加される