]> granicus.if.org Git - php/commitdiff
Fixed bug #77561
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 10 Aug 2020 08:38:33 +0000 (10:38 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 10 Aug 2020 08:38:33 +0000 (10:38 +0200)
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.

NEWS
Zend/zend_language_scanner.l
main/main.c
sapi/cli/tests/bug77561.inc [new file with mode: 0644]
sapi/cli/tests/bug77561.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 9a5c78f9cf9cbbbab3609b3af61a62f174c0ab2d..0ed3122f90f63e658c51089a22980e6968da3563 100644 (file)
--- 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
index ca5804f4bffd8131d521b8ac8607b781726c54eb..c5f897419d1953124edebf00e77cc7e84ea9963a 100644 (file)
@@ -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);
index b90484f1592844b37e116196c587b4a7bbf799c4..390b08c4aa91c029d8a635a3695172b2e668d1d5 100644 (file)
@@ -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 (file)
index 0000000..e0ae5b2
--- /dev/null
@@ -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 (file)
index 0000000..42ce9b5
--- /dev/null
@@ -0,0 +1,10 @@
+--TEST--
+Bug #77561: Shebang line not stripped for non-primary script
+--FILE--
+<?php
+
+require __DIR__ . '/bug77561.inc';
+
+?>
+--EXPECT--
+Test