- SPL extension:
. Fixed memory leak in DirectoryIterator::getExtension() and
SplFileInfo::getExtension(). (Felipe)
+
+- Tokenizer Extension
+ . Fixed bug #54089 (token_get_all() does not stop after __halt_compiler).
+ (Ilia)
+
17 Feb 2011, PHP 5.3.6RC1
- Upgraded bundled Sqlite3 to version 3.7.4. (Ilia)
- Upgraded bundled PCRE to version 8.11. (Ilia)
--- /dev/null
+--TEST--
+Bug #54089 (token_get_all() does not stop after __halt_compiler)
+--SKIPIF--
+<?php if (!extension_loaded("tokenizer")) print "skip"; ?>
+--FILE--
+<?php
+$code = "<?php __halt_compiler();\x01?>\x02";
+$tokens = token_get_all($code);
+
+var_dump($tokens);
+
+$code = '';
+foreach ($tokens as $t)
+{
+ $code .= isset($t[1]) ? $t[1] : $t;
+}
+var_dump($code);
+?>
+--EXPECTF--
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(%d)
+ [1]=>
+ string(6) "<?php "
+ [2]=>
+ int(1)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(%d)
+ [1]=>
+ string(15) "__halt_compiler"
+ [2]=>
+ int(1)
+ }
+}
+string(21) "<?php __halt_compiler"
?>
--EXPECTF--
*** Testing token_get_all() : with different function constructs ***
-array(142) {
+array(135) {
[0]=>
array(3) {
[0]=>
- int(368)
+ int(%d)
[1]=>
string(6) "<?php
"
[1]=>
array(3) {
[0]=>
- int(324)
+ int(%d)
[1]=>
string(7) "declare"
[2]=>
[3]=>
array(3) {
[0]=>
- int(307)
+ int(%d)
[1]=>
string(5) "VALUE"
[2]=>
[5]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(3) "100"
[2]=>
[8]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[9]=>
array(3) {
[0]=>
- int(262)
+ int(%d)
[1]=>
string(7) "include"
[2]=>
[11]=>
array(3) {
[0]=>
- int(315)
+ int(%d)
[1]=>
string(13) ""addfile.php""
[2]=>
[14]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[15]=>
array(3) {
[0]=>
- int(259)
+ int(%d)
[1]=>
string(7) "require"
[2]=>
[17]=>
array(3) {
[0]=>
- int(315)
+ int(%d)
[1]=>
string(13) ""sumfile.php""
[2]=>
[20]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
[21]=>
array(3) {
[0]=>
- int(334)
+ int(%d)
[1]=>
string(8) "function"
[2]=>
[22]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[23]=>
array(3) {
[0]=>
- int(307)
+ int(%d)
[1]=>
string(10) "myFunction"
[2]=>
[25]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$a"
[2]=>
[27]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[29]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
[30]=>
array(3) {
[0]=>
- int(301)
+ int(%d)
[1]=>
string(2) "if"
[2]=>
[32]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$a"
[2]=>
[33]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[35]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[36]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "2"
[2]=>
[38]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(5) "
"
[39]=>
array(3) {
[0]=>
- int(336)
+ int(%d)
[1]=>
string(6) "return"
[2]=>
[40]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[41]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "1"
[2]=>
[43]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
[44]=>
array(3) {
[0]=>
- int(303)
+ int(%d)
[1]=>
string(4) "else"
[2]=>
[45]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(5) "
"
[46]=>
array(3) {
[0]=>
- int(300)
+ int(%d)
[1]=>
string(4) "exit"
[2]=>
[48]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[50]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
[51]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$a"
[2]=>
[52]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[54]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[55]=>
array(3) {
[0]=>
- int(307)
+ int(%d)
[1]=>
string(5) "VALUE"
[2]=>
[57]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[58]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
[59]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[61]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[62]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(2) "20"
[2]=>
[64]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[65]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$c"
[2]=>
[66]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[68]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[69]=>
array(3) {
[0]=>
- int(360)
+ int(%d)
[1]=>
string(5) "array"
[2]=>
[71]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "1"
[2]=>
[73]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "2"
[2]=>
[76]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[77]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
[78]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[79]=>
array(3) {
[0]=>
- int(267)
+ int(%d)
[1]=>
string(3) ">>="
[2]=>
[80]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[81]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "2"
[2]=>
[83]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
[84]=>
array(3) {
[0]=>
- int(301)
+ int(%d)
[1]=>
string(2) "if"
[2]=>
[86]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
[87]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[88]=>
array(3) {
[0]=>
- int(285)
+ int(%d)
[1]=>
string(2) "<="
[2]=>
[89]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[90]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "0"
[2]=>
[92]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
[93]=>
array(3) {
[0]=>
- int(300)
+ int(%d)
[1]=>
string(3) "die"
[2]=>
[95]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[96]=>
array(3) {
[0]=>
- int(303)
+ int(%d)
[1]=>
string(4) "else"
[2]=>
[97]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
[98]=>
array(3) {
[0]=>
- int(266)
+ int(%d)
[1]=>
string(5) "print"
[2]=>
[100]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
[103]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
[104]=>
array(3) {
[0]=>
- int(359)
+ int(%d)
[1]=>
string(4) "list"
[2]=>
[106]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value1"
[2]=>
[108]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value2"
[2]=>
[110]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[112]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[113]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$c"
[2]=>
[115]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
[116]=>
array(3) {
[0]=>
- int(301)
+ int(%d)
[1]=>
string(2) "if"
[2]=>
[118]=>
array(3) {
[0]=>
- int(351)
+ int(%d)
[1]=>
string(5) "empty"
[2]=>
[120]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value1"
[2]=>
[122]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[123]=>
array(3) {
[0]=>
- int(279)
+ int(%d)
[1]=>
string(2) "&&"
[2]=>
[124]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[126]=>
array(3) {
[0]=>
- int(350)
+ int(%d)
[1]=>
string(5) "isset"
[2]=>
[128]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value1"
[2]=>
[131]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
[133]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
[134]=>
array(3) {
[0]=>
- int(352)
+ int(%d)
[1]=>
string(15) "__halt_compiler"
[2]=>
int(26)
}
- [135]=>
- string(1) "("
- [136]=>
- string(1) ")"
- [137]=>
- string(1) ";"
- [138]=>
- array(3) {
- [0]=>
- int(371)
- [1]=>
- string(1) "
-"
- [2]=>
- int(26)
- }
- [139]=>
- string(1) "}"
- [140]=>
- array(3) {
- [0]=>
- int(371)
- [1]=>
- string(1) "
-"
- [2]=>
- int(27)
- }
- [141]=>
- array(3) {
- [0]=>
- int(370)
- [1]=>
- string(2) "?>"
- [2]=>
- int(28)
- }
}
Done
ZVAL_NULL(&token);
token_line = CG(zend_lineno);
+
+ if (token_type == T_HALT_COMPILER) {
+ break;
+ }
}
}