[PHP-dev 1370] Windowsで長い文字列をputenvすると例外が発生する

KUWASHIMA Yuichiro yuichiro @ kuwashima.org
2007年 5月 18日 (金) 14:18:50 JST


桑島です。

WindowsXP/2000 + Apache 2.0.59 + PHP4.4.6,4.4.7の環境において、putenvで
長い文字列を環境変数に設定しようとすると例外ダイアログが表示されてプロセ
スが終了します。
その場合、実行ファイルにApache.exe、モジュールにmsvcrt.dllと出ます。

CLI向けの再現コードは以下ですが、メモリを食いつぶす可能性があるので、実
行の際は気をつけてください。

<?php
$x = __FILE__;
while(1){
	$x .= $x;
	putenv("X=$x");
}
?>

デバッグすると、ext/standard/basic_functions.c(1437)のputenv()の先で例外
が発生します。
しかし、デバッグ用でないMSVCRT.DLLの関数が呼ばれていてよくわかりません。
添付したパッチのようにSetEnvironmentVariable関数に変更すると落ちなくなる
ようです。コメントにメモリリークするとあるのが気になりますが、MSDNには
載っていません。

-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: basic_functions.diff
型:         text/x-patch
サイズ:     583 バイト
説明:       無し
URL:        http://ml.php.gr.jp/pipermail/php-dev/attachments/20070518/c395fa40/attachment.bin 


PHP-dev メーリングリストの案内