しかし、bug65475のテストを見て、重大な抜けがあることに気づきました。
このテストは、session.use_strict_mode=1 の指定がないと意味がないはずですが、見あたりません。use_strict_modeのデフォルトは 0 ですから、これだと strict sessions モードでない状態でのテストになります。$ cat bug65475.phpt --TEST-- Bug #65475: Session ID is not initialized when session.usr_strict_mode=1 --INI-- session.save_handler=files session.name=PHPSESSID --SKIPIF-- <?php include('skipif.inc'); ?> --FILE-- <?php ob_start(); echo "Testing file module".PHP_EOL; session_start(); $_SESSION['foo'] = 1234; $_SESSION['cnt'] = 1; $session_id = session_id(); session_write_close(); session_start(); var_dump($session_id === session_id()); $_SESSION['cnt']++; session_write_close(); session_start(); var_dump($session_id === session_id()); var_dump($_SESSION['cnt']); // Should be int(2) session_write_close(); --EXPECTF-- Testing file module bool(true) bool(true) int(2)
試みに、上記指定を追加して、同バグのあるPHP5.5.2およびPHP5.5.3で上記をテストしてみました。
なんと、テストをPASSしてしまいました。バグがある状態でFAILしてくれないと、テストの意味がありません。ということで、上記テストは、use_strict_mode=1の指定がないだけでなく、テストとして不完全なようです。ockeghem@php552:~/php-5.5.2/ext/session/tests$ pear run-tests bug65475.phpt Running 1 tests PASS Bug #65475: Session ID is not initialized when session.usr_strict_mode=1[bug65475.phpt] TOTAL TIME: 00:00 1 PASSED TESTS 0 SKIPPED TESTS
それでは、他のテストはどうなんだろうと思って同じディレクトリをgrepしてみましたが、use_strict_mode=1に設定したテストはないようです。
PHP5.5.1からPHP5.5.2(strict sessionsが実装された)で、ext/session/tests内のテスト(*.phpt)は197で増えていません。PHP5.5.4でphptの数は200に増えましたが、上記の他にbug65359に関するもののようです。
まとめ
- PHP5.5.4にてstrict sessionのバグ(65475)が修正され、ようやくstrict sessionsが使えるようになった
- 上記バグに関するテストbug65475.phptにはバグがあり、PHP5.5.3以前でもFAILしない
- PHP5.5.4までの時点で、strict sessionsに関するテストが1つも存在しない
0 件のコメント:
コメントを投稿