]> granicus.if.org Git - php/commitdiff
Fixed bug #67741 (auto_prepend_file messes up __LINE__)
authorReeze Xia <reeze@php.net>
Tue, 3 Mar 2015 03:25:30 +0000 (11:25 +0800)
committerReeze Xia <reeze@php.net>
Tue, 3 Mar 2015 03:43:23 +0000 (11:43 +0800)
This also fixes bug #54081

main/main.c
sapi/cli/tests/bug67741.phpt [new file with mode: 0644]
sapi/cli/tests/bug67741_stub.inc [new file with mode: 0644]

index d073b850a5ecb5136cb7318f1f6d48ed76bc8d68..8a2c48dcd22944de6286062d2caada1d3a4852d4 100644 (file)
@@ -2579,8 +2579,21 @@ PHPAPI int php_execute_script(zend_file_handle *primary_file TSRMLS_DC)
 #endif
                        zend_set_timeout(INI_INT("max_execution_time"), 0);
                }
-               retval = (zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, NULL, 3, prepend_file_p, primary_file, append_file_p) == SUCCESS);
 
+               {
+                       /*
+                          If cli primary file has shabang line and there is a prepend file,
+                          the `start_lineno` will be used by prepend file but not primary file,
+                          save it and restore after prepend file been executed.
+                        */
+                       int orig_start_lineno = CG(start_lineno);
+
+                       CG(start_lineno) = 0;
+                       retval = (zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, NULL, 1, prepend_file_p) == SUCCESS);
+                       CG(start_lineno) = orig_start_lineno;
+
+                       retval = retval && (zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, NULL, 2, primary_file, append_file_p) == SUCCESS);
+               }
        } zend_end_try();
 
 #if HAVE_BROKEN_GETCWD
diff --git a/sapi/cli/tests/bug67741.phpt b/sapi/cli/tests/bug67741.phpt
new file mode 100644 (file)
index 0000000..df09814
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+Bug #67741 (auto_prepend_file messes up __LINE__)
+--INI--
+include_path={PWD}
+auto_prepend_file=bug67741_stub.inc
+--SKIPIF--
+<?php
+include "skipif.inc";
+?>
+--FILE--
+#!/bin/env php
+<?php
+echo "primary lineno: ", __LINE__, "\n";
+?>
+--EXPECT--
+prepend lineno: 2
+primary lineno: 3
\ No newline at end of file
diff --git a/sapi/cli/tests/bug67741_stub.inc b/sapi/cli/tests/bug67741_stub.inc
new file mode 100644 (file)
index 0000000..4d7470e
--- /dev/null
@@ -0,0 +1,3 @@
+<?php
+echo "prepend lineno: ", __LINE__, "\n";
+?>