summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2011-02-28 15:18:27 +0000
committerIlia Alshanetsky <iliaa@php.net>2011-02-28 15:18:27 +0000
commit5d83ad8c44490ea4caa80f66e66e4c2cad010a32 (patch)
tree72ffde349d25c70fb8d271e986a6a8790d00fbcd
parentf657ba978b687661e813ed848ea5002c794f4b97 (diff)
downloadphp-git-5d83ad8c44490ea4caa80f66e66e4c2cad010a32.tar.gz
Fixed bug #54089 (token_get_all() does not stop after __halt_compiler).
-rw-r--r--NEWS5
-rw-r--r--ext/tokenizer/tests/bug54089.phpt40
-rw-r--r--ext/tokenizer/tests/token_get_all_variation16.phpt213
-rw-r--r--ext/tokenizer/tokenizer.c4
4 files changed, 137 insertions, 125 deletions
diff --git a/NEWS b/NEWS
index ae8f4be7b9..928934c2e9 100644
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,11 @@
- 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)
diff --git a/ext/tokenizer/tests/bug54089.phpt b/ext/tokenizer/tests/bug54089.phpt
new file mode 100644
index 0000000000..e1f6d79e9c
--- /dev/null
+++ b/ext/tokenizer/tests/bug54089.phpt
@@ -0,0 +1,40 @@
+--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"
diff --git a/ext/tokenizer/tests/token_get_all_variation16.phpt b/ext/tokenizer/tests/token_get_all_variation16.phpt
index 55241ce6a1..4ae694e741 100644
--- a/ext/tokenizer/tests/token_get_all_variation16.phpt
+++ b/ext/tokenizer/tests/token_get_all_variation16.phpt
@@ -55,11 +55,11 @@ echo "Done"
?>
--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
"
@@ -69,7 +69,7 @@ array(142) {
[1]=>
array(3) {
[0]=>
- int(324)
+ int(%d)
[1]=>
string(7) "declare"
[2]=>
@@ -80,7 +80,7 @@ array(142) {
[3]=>
array(3) {
[0]=>
- int(307)
+ int(%d)
[1]=>
string(5) "VALUE"
[2]=>
@@ -91,7 +91,7 @@ array(142) {
[5]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(3) "100"
[2]=>
@@ -104,7 +104,7 @@ array(142) {
[8]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -114,7 +114,7 @@ array(142) {
[9]=>
array(3) {
[0]=>
- int(262)
+ int(%d)
[1]=>
string(7) "include"
[2]=>
@@ -125,7 +125,7 @@ array(142) {
[11]=>
array(3) {
[0]=>
- int(315)
+ int(%d)
[1]=>
string(13) ""addfile.php""
[2]=>
@@ -138,7 +138,7 @@ array(142) {
[14]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -148,7 +148,7 @@ array(142) {
[15]=>
array(3) {
[0]=>
- int(259)
+ int(%d)
[1]=>
string(7) "require"
[2]=>
@@ -159,7 +159,7 @@ array(142) {
[17]=>
array(3) {
[0]=>
- int(315)
+ int(%d)
[1]=>
string(13) ""sumfile.php""
[2]=>
@@ -172,7 +172,7 @@ array(142) {
[20]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
@@ -183,7 +183,7 @@ array(142) {
[21]=>
array(3) {
[0]=>
- int(334)
+ int(%d)
[1]=>
string(8) "function"
[2]=>
@@ -192,7 +192,7 @@ array(142) {
[22]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -201,7 +201,7 @@ array(142) {
[23]=>
array(3) {
[0]=>
- int(307)
+ int(%d)
[1]=>
string(10) "myFunction"
[2]=>
@@ -212,7 +212,7 @@ array(142) {
[25]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$a"
[2]=>
@@ -223,7 +223,7 @@ array(142) {
[27]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -235,7 +235,7 @@ array(142) {
[29]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
@@ -245,7 +245,7 @@ array(142) {
[30]=>
array(3) {
[0]=>
- int(301)
+ int(%d)
[1]=>
string(2) "if"
[2]=>
@@ -256,7 +256,7 @@ array(142) {
[32]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$a"
[2]=>
@@ -265,7 +265,7 @@ array(142) {
[33]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -276,7 +276,7 @@ array(142) {
[35]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -285,7 +285,7 @@ array(142) {
[36]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "2"
[2]=>
@@ -296,7 +296,7 @@ array(142) {
[38]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(5) "
"
@@ -306,7 +306,7 @@ array(142) {
[39]=>
array(3) {
[0]=>
- int(336)
+ int(%d)
[1]=>
string(6) "return"
[2]=>
@@ -315,7 +315,7 @@ array(142) {
[40]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -324,7 +324,7 @@ array(142) {
[41]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "1"
[2]=>
@@ -335,7 +335,7 @@ array(142) {
[43]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
@@ -345,7 +345,7 @@ array(142) {
[44]=>
array(3) {
[0]=>
- int(303)
+ int(%d)
[1]=>
string(4) "else"
[2]=>
@@ -354,7 +354,7 @@ array(142) {
[45]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(5) "
"
@@ -364,7 +364,7 @@ array(142) {
[46]=>
array(3) {
[0]=>
- int(300)
+ int(%d)
[1]=>
string(4) "exit"
[2]=>
@@ -375,7 +375,7 @@ array(142) {
[48]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -387,7 +387,7 @@ array(142) {
[50]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
@@ -398,7 +398,7 @@ array(142) {
[51]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$a"
[2]=>
@@ -407,7 +407,7 @@ array(142) {
[52]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -418,7 +418,7 @@ array(142) {
[54]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -427,7 +427,7 @@ array(142) {
[55]=>
array(3) {
[0]=>
- int(307)
+ int(%d)
[1]=>
string(5) "VALUE"
[2]=>
@@ -438,7 +438,7 @@ array(142) {
[57]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -448,7 +448,7 @@ array(142) {
[58]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
@@ -457,7 +457,7 @@ array(142) {
[59]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -468,7 +468,7 @@ array(142) {
[61]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -477,7 +477,7 @@ array(142) {
[62]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(2) "20"
[2]=>
@@ -488,7 +488,7 @@ array(142) {
[64]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -498,7 +498,7 @@ array(142) {
[65]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$c"
[2]=>
@@ -507,7 +507,7 @@ array(142) {
[66]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -518,7 +518,7 @@ array(142) {
[68]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -527,7 +527,7 @@ array(142) {
[69]=>
array(3) {
[0]=>
- int(360)
+ int(%d)
[1]=>
string(5) "array"
[2]=>
@@ -538,7 +538,7 @@ array(142) {
[71]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "1"
[2]=>
@@ -549,7 +549,7 @@ array(142) {
[73]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "2"
[2]=>
@@ -562,7 +562,7 @@ array(142) {
[76]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -572,7 +572,7 @@ array(142) {
[77]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
@@ -581,7 +581,7 @@ array(142) {
[78]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -590,7 +590,7 @@ array(142) {
[79]=>
array(3) {
[0]=>
- int(267)
+ int(%d)
[1]=>
string(3) ">>="
[2]=>
@@ -599,7 +599,7 @@ array(142) {
[80]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -608,7 +608,7 @@ array(142) {
[81]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "2"
[2]=>
@@ -619,7 +619,7 @@ array(142) {
[83]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
@@ -630,7 +630,7 @@ array(142) {
[84]=>
array(3) {
[0]=>
- int(301)
+ int(%d)
[1]=>
string(2) "if"
[2]=>
@@ -641,7 +641,7 @@ array(142) {
[86]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
@@ -650,7 +650,7 @@ array(142) {
[87]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -659,7 +659,7 @@ array(142) {
[88]=>
array(3) {
[0]=>
- int(285)
+ int(%d)
[1]=>
string(2) "<="
[2]=>
@@ -668,7 +668,7 @@ array(142) {
[89]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -677,7 +677,7 @@ array(142) {
[90]=>
array(3) {
[0]=>
- int(305)
+ int(%d)
[1]=>
string(1) "0"
[2]=>
@@ -688,7 +688,7 @@ array(142) {
[92]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
@@ -698,7 +698,7 @@ array(142) {
[93]=>
array(3) {
[0]=>
- int(300)
+ int(%d)
[1]=>
string(3) "die"
[2]=>
@@ -709,7 +709,7 @@ array(142) {
[95]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -719,7 +719,7 @@ array(142) {
[96]=>
array(3) {
[0]=>
- int(303)
+ int(%d)
[1]=>
string(4) "else"
[2]=>
@@ -728,7 +728,7 @@ array(142) {
[97]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
@@ -738,7 +738,7 @@ array(142) {
[98]=>
array(3) {
[0]=>
- int(266)
+ int(%d)
[1]=>
string(5) "print"
[2]=>
@@ -749,7 +749,7 @@ array(142) {
[100]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$b"
[2]=>
@@ -762,7 +762,7 @@ array(142) {
[103]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(2) "
@@ -773,7 +773,7 @@ array(142) {
[104]=>
array(3) {
[0]=>
- int(359)
+ int(%d)
[1]=>
string(4) "list"
[2]=>
@@ -784,7 +784,7 @@ array(142) {
[106]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value1"
[2]=>
@@ -795,7 +795,7 @@ array(142) {
[108]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value2"
[2]=>
@@ -806,7 +806,7 @@ array(142) {
[110]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -817,7 +817,7 @@ array(142) {
[112]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -826,7 +826,7 @@ array(142) {
[113]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(2) "$c"
[2]=>
@@ -837,7 +837,7 @@ array(142) {
[115]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) "
"
@@ -847,7 +847,7 @@ array(142) {
[116]=>
array(3) {
[0]=>
- int(301)
+ int(%d)
[1]=>
string(2) "if"
[2]=>
@@ -858,7 +858,7 @@ array(142) {
[118]=>
array(3) {
[0]=>
- int(351)
+ int(%d)
[1]=>
string(5) "empty"
[2]=>
@@ -869,7 +869,7 @@ array(142) {
[120]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value1"
[2]=>
@@ -880,7 +880,7 @@ array(142) {
[122]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -889,7 +889,7 @@ array(142) {
[123]=>
array(3) {
[0]=>
- int(279)
+ int(%d)
[1]=>
string(2) "&&"
[2]=>
@@ -898,7 +898,7 @@ array(142) {
[124]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -909,7 +909,7 @@ array(142) {
[126]=>
array(3) {
[0]=>
- int(350)
+ int(%d)
[1]=>
string(5) "isset"
[2]=>
@@ -920,7 +920,7 @@ array(142) {
[128]=>
array(3) {
[0]=>
- int(309)
+ int(%d)
[1]=>
string(7) "$value1"
[2]=>
@@ -933,7 +933,7 @@ array(142) {
[131]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(1) " "
[2]=>
@@ -944,7 +944,7 @@ array(142) {
[133]=>
array(3) {
[0]=>
- int(371)
+ int(%d)
[1]=>
string(3) "
"
@@ -954,48 +954,11 @@ array(142) {
[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
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
index 2357f43015..ee28b3b8b4 100644
--- a/ext/tokenizer/tokenizer.c
+++ b/ext/tokenizer/tokenizer.c
@@ -151,6 +151,10 @@ static void tokenize(zval *return_value TSRMLS_DC)
ZVAL_NULL(&token);
token_line = CG(zend_lineno);
+
+ if (token_type == T_HALT_COMPILER) {
+ break;
+ }
}
}