summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-08-06 12:04:23 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-08-06 12:04:23 +0200
commitfcff418411702dbe120e1281096794042b0e1d55 (patch)
treebdef22acc41ad348854d4bd4d5bc5022a8e794dd /Zend
parent84a080ef506c9e8a2d20529a88ff6622ecbecc42 (diff)
parent2cbc94097ebb1757d57ad02189bdbb7e2e1a7162 (diff)
downloadphp-git-fcff418411702dbe120e1281096794042b0e1d55.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #79934: CRLF-only line in heredoc causes parsing error
Diffstat (limited to 'Zend')
-rw-r--r--Zend/tests/bug79934.phpt29
-rw-r--r--Zend/zend_language_scanner.l1
2 files changed, 30 insertions, 0 deletions
diff --git a/Zend/tests/bug79934.phpt b/Zend/tests/bug79934.phpt
new file mode 100644
index 0000000000..a983cb742d
--- /dev/null
+++ b/Zend/tests/bug79934.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Bug #79934: CRLF-only line in heredoc causes parsing error
+--DESCRIPTION--
+This test covers different variations of whitespace-only lines in heredoc strings.
+These whitespace-only lines should be ignored when stripping indentation.
+--FILE--
+<?php
+// lines with only CRLF should not cause a parse error
+eval("\$s1 = <<<HEREDOC\r\n a\r\n\r\n b\r\n HEREDOC;");
+var_dump(addcslashes($s1, "\r\n"));
+
+// lines with only a LF should not cause a parse error
+eval("\$s2 = <<<HEREDOC\n a\n\n b\n HEREDOC;");
+var_dump(addcslashes($s2, "\n"));
+
+// lines with only a CR should not cause a parse error
+eval("\$s3 = <<<HEREDOC\r a\r\r b\r HEREDOC;");
+var_dump(addcslashes($s3, "\r"));
+
+// lines with only whitespace should not cause a parse error
+eval("\$s4 = <<<HEREDOC\r a\r\n \r\n b\r HEREDOC;");
+var_dump(addcslashes($s4, "\n\r"));
+
+?>
+--EXPECT--
+string(10) "a\r\n\r\nb"
+string(6) "a\n\nb"
+string(6) "a\r\rb"
+string(10) "a\r\n\r\nb"
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 7f42159b46..ca5804f4bf 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1170,6 +1170,7 @@ static const char *next_newline(const char *str, const char *end, size_t *newlin
for (; str < end; str++) {
if (*str == '\r') {
*newline_len = str + 1 < end && *(str + 1) == '\n' ? 2 : 1;
+ return str;
} else if (*str == '\n') {
*newline_len = 1;
return str;