[PHP-users 9897] Re: PHP 4.2.3で4バイト以下の配列の変数値が取れない

Moriyoshi Koizumi php-users@php.gr.jp
Sat, 07 Sep 2002 22:01:38 +0900


小泉@町田です。

もうお気づきのこととは思いますが、そのパッチを適用しても、

$ echo '<?php print_r( $_REQUEST ); ?>' | env QUERY_STRING="abc%3dhoge" 
php

とすると、

Array
(
    [abc] => hoge
)

となってしまうようです。
通常の使用状況では、問題は起こりえないのですが。

Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:

> 大垣です。
> 
> さっきの今で作ったパッチなので明らかにテスト不足ですが
> 現象からするとこのパッチで解決のはずです。
> 
> 問題がある場合はメールをください。
> 
> # ここは変更された部分ではないので、どこかでURLデコード
> # されていたのが、されなくなった為バグが発生したと考えら
> # れます。
> # 初期化コードがいい加減なのは知っていましたが、そろそろ
> # 本当に修正しないといけないですね...
> 
> Yasuo Ohgaki wrote:
> > 大垣です。
> > 
> > Y.Nakamura wrote:
> > 
> >>皆さんはじめまして。中村と申します。
> >>いつもMLのログをはじめ活用させていただいております。
> >>
> >>自己解決できそうにないので質問させて下さい。
> >>
> >>バージョン4.2.2の環境で実際に動かしながら開発を進めていたのですが、4.2.3
> >>がリリースされたとのことで早速バージョンアップを行ないました。すると以下
> >>のスクリプトで4バイト以下の値が取得できないようになってしまいました。
> > 
> > 
> > 原因が判りました。
> > 
> > URLデコードする前に変数の値の開始位置を取得して、その場所
> > 以降を値として初期化しています。このため、トランケートされた
> > 様になってしまいます。
> > 
> > # なぜ、今まで普通に動作していたのか判りませんが...
> > 
> > 今晩にでもパッチをポストするので試してみてください。
> 
> --- mbstring.c.~1.95.~	Tue Sep  3 19:31:46 2002
> +++ mbstring.c	Sat Sep  7 18:13:48 2002
> @@ -1271,9 +1271,9 @@
>  	strtok_buf = NULL;
>  	var = php_strtok_r(res, separator, &strtok_buf);
>  	while (var)  {
> +		len_list[n] = php_url_decode(var, strlen(var));
>  		val = strchr(var, '=');
>  		val_list[n] = var;
> -		len_list[n] = php_url_decode(var, strlen(var));
>  		n++;
>  		if (val) { /* have a value */
>  			*val++ = '\0';
> 
> --
> Yasuo Ohgaki
> 9/14高松でオフ会しましょう。参加者募集中!DMください。
> 
> 
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users