summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReeze Xia <reeze@php.net>2015-03-03 11:25:30 +0800
committerReeze Xia <reeze@php.net>2015-03-03 11:43:23 +0800
commit4e2c87edb34c4f151da6899d523c93b8e8565975 (patch)
tree83e672c254725ab1c8cee64052ce45d3a752d77e
parent169ac35c66220b7c148dd96e70c691549f188b24 (diff)
downloadphp-git-4e2c87edb34c4f151da6899d523c93b8e8565975.tar.gz
Fixed bug #67741 (auto_prepend_file messes up __LINE__)
This also fixes bug #54081
-rw-r--r--main/main.c15
-rw-r--r--sapi/cli/tests/bug67741.phpt17
-rw-r--r--sapi/cli/tests/bug67741_stub.inc3
3 files changed, 34 insertions, 1 deletions
diff --git a/main/main.c b/main/main.c
index d073b850a5..8a2c48dcd2 100644
--- a/main/main.c
+++ b/main/main.c
@@ -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
index 0000000000..df0981443f
--- /dev/null
+++ b/sapi/cli/tests/bug67741.phpt
@@ -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
index 0000000000..4d7470ea29
--- /dev/null
+++ b/sapi/cli/tests/bug67741_stub.inc
@@ -0,0 +1,3 @@
+<?php
+echo "prepend lineno: ", __LINE__, "\n";
+?>