2007年03月26日(月) [過去の今日]
#1 PHP 4.3.11以前にsuper global変数上書きのバグ
PHPでプログラムを書いてたのだが、なんか挙動がおかしい。どうもバグっぽい。 最小再現コードはこんな感じ。
<?php session_start(); print $foo.'<br>'; $_SESSION['foo'] = 'foo'; $foo = 'bar'; print $_SESSION['foo'].'<br>'; ?>
これでリロードしてると、$fooの中身が$_SESSION['foo']と同じポインタ(?)になってるのがわかる。最初から値が入ってたり、$fooを書き換えると$_SESSION['foo']まで書き変わったりする。逆も然り。
どうもPHP 4.3.11以前でなおかつregister_globals = Onの時に出るバグのようだ。
Debian sargeのPHPは4.3.10なのな。PHPプロジェクトに直接投げる気もしないし、こっちに報告してみた。
でもなー、どうせもうすぐetch出るし、今時4.3系列ってのもナニだし、register_globalsなんてふつーoffだし、別にどうでもいいバグという気もしなくはない。
いや、そんなバグにひっかかった俺も俺なんですが orz
まあしょんぼり極まりないバグとはいえ、一部のレンタルサーバはregister_globals = Onにして提供されてたりするようだし、4.3.11以前のPHPが入ってたりする事もあるようなので、気をつけられたし。
(@471)
@ Debianの決定は正しいと思う:
BTSで返事 をもらった。Debianはregister_globalsをサポートしない、とのこと。これは非常に正しい判断だと思う。
伝わるかどうかわからないが、それを支持する旨を書いて送っておいた。いい加減この中学生以下の俺の英語力はどうにかせんとなあ……。
(@073)