diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c
index 25c6070ec58..fbcd63c6189 100644
--- a/Zend/zend_highlight.c
+++ b/Zend/zend_highlight.c
@@ -181,13 +181,7 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
break;
}
} else if (token_type == T_END_HEREDOC) {
- zend_bool has_semicolon=(strchr(token.value.str.val, ';')?1:0);
-
efree(token.value.str.val);
- if (has_semicolon) {
- /* the following semicolon was unput(), ignore it */
- lex_scan(&token TSRMLS_CC);
- }
}
token.type = 0;
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 7dc39cae292..d2d75a65b9a 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1702,8 +1702,8 @@ NEWLINE ("\r"|"\n"|"\r\n")
}
if (label_len==CG(heredoc_len) && !memcmp(yytext, CG(heredoc), label_len)) {
- zendlval->value.str.val = estrndup(yytext, yyleng); /* unput destroys yytext */
- zendlval->value.str.len = yyleng;
+ zendlval->value.str.val = estrndup(yytext, label_len); /* unput destroys yytext */
+ zendlval->value.str.len = label_len;
if (unput_semicolon) {
unput(';');
}
diff --git a/ext/standard/tests/general_functions/highlight_heredoc.phpt b/ext/standard/tests/general_functions/highlight_heredoc.phpt
new file mode 100644
index 00000000000..89834a27097
--- /dev/null
+++ b/ext/standard/tests/general_functions/highlight_heredoc.phpt
@@ -0,0 +1,19 @@
+--TEST--
+highlight_string() handling of heredoc
+--FILE--
+
+--EXPECT--
+
+
diff --git a/ext/tokenizer/tests/bug26463.phpt b/ext/tokenizer/tests/bug26463.phpt
new file mode 100644
index 00000000000..d1e75b4e034
--- /dev/null
+++ b/ext/tokenizer/tests/bug26463.phpt
@@ -0,0 +1,118 @@
+--TEST--
+Bug #26463 (token_get_all() does not correctly handle semicolons after T_END_HEREDOC)
+--FILE--
+';
+var_dump(token_get_all($str));
+?>
+--EXPECT--
+array(17) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(363)
+ [1]=>
+ string(6) "
+ array(2) {
+ [0]=>
+ int(307)
+ [1]=>
+ string(2) "$x"
+ }
+ [2]=>
+ string(1) "="
+ [3]=>
+ array(2) {
+ [0]=>
+ int(367)
+ [1]=>
+ string(6) "<<
$x=<<<DD
jhdsjkfhjdsh
DD
."";
$a=<<<DDDD
jhdsjkfhjdsh
DDDD;
+