summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-08-10 10:38:33 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-08-10 10:38:33 +0200
commit896dad4c794f7826812bcfdbaaa9f0b3518d9385 (patch)
tree6ccdc3ec130c5857463878992ee74ef2014fb046
parent74c43818066585a5155c6c07b46b3d1727fd14b8 (diff)
downloadphp-git-896dad4c794f7826812bcfdbaaa9f0b3518d9385.tar.gz
Fixed bug #77561
Unconditionally strip shebang lines when using the CLI SAPI, independently of whether they occur in the primary or non-primary script. It's unlikely that someone intentionally wants to print that shebang line when including a script, and this regularly causes issues when scripts are used in multiple contexts, e.g. for direct invocation and as a phar bootstrap.
-rw-r--r--NEWS2
-rw-r--r--Zend/zend_language_scanner.l1
-rw-r--r--main/main.c15
-rw-r--r--sapi/cli/tests/bug77561.inc4
-rw-r--r--sapi/cli/tests/bug77561.phpt10
5 files changed, 17 insertions, 15 deletions
diff --git a/NEWS b/NEWS
index 9a5c78f9cf..0ed3122f90 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,8 @@ PHP NEWS
. Fixed bug #79897 (Promoted constructor params with attribs cause crash).
(Deus Kane)
. Fixed bug #79946 (Build fails due to undeclared UINT32_C). (Nikita)
+ . Fixed bug #77561 (Shebang line not stripped for non-primary script).
+ (Nikita)
- Date:
. Fixed bug #60302 (DateTime::createFromFormat should new static(), not new
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index ca5804f4bf..c5f897419d 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -576,7 +576,6 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle)
}
if (CG(skip_shebang)) {
- CG(skip_shebang) = 0;
BEGIN(SHEBANG);
} else {
BEGIN(INITIAL);
diff --git a/main/main.c b/main/main.c
index b90484f159..390b08c4aa 100644
--- a/main/main.c
+++ b/main/main.c
@@ -2533,20 +2533,7 @@ PHPAPI int php_execute_script(zend_file_handle *primary_file)
zend_set_timeout(INI_INT("max_execution_time"), 0);
}
- /*
- If cli primary file has shebang line and there is a prepend file,
- the `skip_shebang` will be used by prepend file but not primary file,
- save it and restore after prepend file been executed.
- */
- if (CG(skip_shebang) && prepend_file_p) {
- CG(skip_shebang) = 0;
- if (zend_execute_scripts(ZEND_REQUIRE, NULL, 1, prepend_file_p) == SUCCESS) {
- CG(skip_shebang) = 1;
- retval = (zend_execute_scripts(ZEND_REQUIRE, NULL, 2, primary_file, append_file_p) == SUCCESS);
- }
- } else {
- retval = (zend_execute_scripts(ZEND_REQUIRE, NULL, 3, prepend_file_p, primary_file, append_file_p) == SUCCESS);
- }
+ retval = (zend_execute_scripts(ZEND_REQUIRE, NULL, 3, prepend_file_p, primary_file, append_file_p) == SUCCESS);
} zend_end_try();
if (EG(exception)) {
diff --git a/sapi/cli/tests/bug77561.inc b/sapi/cli/tests/bug77561.inc
new file mode 100644
index 0000000000..e0ae5b2d13
--- /dev/null
+++ b/sapi/cli/tests/bug77561.inc
@@ -0,0 +1,4 @@
+#!/usr/bin/env php
+<?php
+declare(strict_types=1);
+echo "Test\n";
diff --git a/sapi/cli/tests/bug77561.phpt b/sapi/cli/tests/bug77561.phpt
new file mode 100644
index 0000000000..42ce9b53db
--- /dev/null
+++ b/sapi/cli/tests/bug77561.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Bug #77561: Shebang line not stripped for non-primary script
+--FILE--
+<?php
+
+require __DIR__ . '/bug77561.inc';
+
+?>
+--EXPECT--
+Test