PHP5.4-5.7でのdeclareにまつわるパーサのバグ
@do_aki こんにちわ。Zend Multibyteの記事を読んだので、挙動を確認していたのですが、PHP終了タグ ?> の有無でパーサの挙動が異なるケースを発見しました。これって処理系のバグなんでしょうか・・?gist.github.com/DQNEO/09ee78f8…
2014-07-23 10:52:38@do_aki gist.github.com/DQNEO/09ee78f8… こちらです。declare(encoding='UTF-8');したときに、終了タグ ?> の有り無しで警告がの有無が変わりました。
2014-07-23 10:58:57declare 宣言を scan した時点で、LANG_SCNG(script_encoding) LANG_SCNG(input_filter) LANG_SCNG(output_filter) が置き換わるのか
2014-07-23 11:10:50@DQNEO これは、確かにバグっぽい感じですね。 declare によってスクリプトの再読込が行われた場合にスキャナがバッファ長以上喰ってる感じ。 "?>" がある場合は、NULL 文字を喰っても警告にならない(スキャナの状態が異なるため)だけで、過食なのは同じじゃないかな。
2014-07-23 11:41:55@do_aki @DQNEO 変換で短くなった文字数だけ余分にパーサがヌルバイト以降を読んでいる感じですかね / gist.github.com/ngyuki/bb90212…
2014-07-23 14:21:03@do_aki 文字数(というかバイト数)が短くなるのは単に utf-8 → euc-jp だからではないでしょうか?(script_encoding が euc-jp なので utf-8 のソースが euc-jp に変換される)
2014-07-23 15:00:26@do_aki ん? スクリプトが utf-8 で書かれていて、script_encoding が euc-jp の場合に発生するのですよね?
2014-07-23 15:03:35@ngyuki あー。zend.script_encoding を指定しない場合でも発生するのですよ。デフォルトは UTF-8 だと思ってたんですけど、違うのかな……
2014-07-23 15:08:55