summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-08-06 12:03:57 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-08-06 12:03:57 +0200
commit2cbc94097ebb1757d57ad02189bdbb7e2e1a7162 (patch)
tree06042e9d9f5e23c5698522a1b3b1b426ad4895c6
parent99645f5352b5dc9faaece36f606edfff5f7a7460 (diff)
parent06ade15528fa64acd9dea92b072a985793d1dcc1 (diff)
downloadphp-git-2cbc94097ebb1757d57ad02189bdbb7e2e1a7162.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fix #79934: CRLF-only line in heredoc causes parsing error
-rw-r--r--NEWS2
-rw-r--r--Zend/tests/bug79934.phpt29
-rw-r--r--Zend/zend_language_scanner.l1
3 files changed, 32 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 52dc2d9e44..211d625f16 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,8 @@ PHP NEWS
. Fixed bug #79895 (PHP_CHECK_GCC_ARG does not allow flags with equal sign).
(Santiago M. Mola)
. Fixed bug #79919 (Stack use-after-scope in define()). (cmb)
+ . Fixed bug #79934 (CRLF-only line in heredoc causes parsing error).
+ (Pieter van den Ham)
- LDAP:
. Fixed memory leaks. (ptomulik)
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 92fa9b7230..db493211e2 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1118,6 +1118,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;