summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2010-06-27 21:46:16 +0000
committerFelipe Pena <felipe@php.net>2010-06-27 21:46:16 +0000
commit3396a6d18522f26d315e2ee59c130d02e2ae14b2 (patch)
tree9e8ae1b64af6991d4a573d97545e4aa50b7a8032
parentcb6bf19bfaff871c10dbccc5e8149f89d99983d3 (diff)
downloadphp-git-3396a6d18522f26d315e2ee59c130d02e2ae14b2.tar.gz
- Fixed bug #48930 (__COMPILER_HALT_OFFSET__ incorrect in PHP >= 5.3)
-rw-r--r--Zend/tests/bug48930.phpt16
-rw-r--r--Zend/zend_globals.h1
-rw-r--r--Zend/zend_language_scanner.c5
-rw-r--r--Zend/zend_language_scanner.l3
-rw-r--r--sapi/cgi/cgi_main.c2
-rw-r--r--sapi/cli/php_cli.c2
6 files changed, 26 insertions, 3 deletions
diff --git a/Zend/tests/bug48930.phpt b/Zend/tests/bug48930.phpt
new file mode 100644
index 0000000000..13b67f2365
--- /dev/null
+++ b/Zend/tests/bug48930.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #48930 (__COMPILER_HALT_OFFSET__ incorrect in PHP>=5.3)
+--FILE--
+#!php
+<?php
+
+/*
+ * Test
+ */
+printf("__COMPILER_HALT_OFFSET__ is %d\n",__COMPILER_HALT_OFFSET__);
+
+__halt_compiler();
+
+?>
+--EXPECT--
+__COMPILER_HALT_OFFSET__ is 116
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index f8bc38c20d..8c3a63bcb7 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -88,6 +88,7 @@ struct _zend_compiler_globals {
char *compiled_filename;
int zend_lineno;
+ int shebang_len;
char *heredoc;
int heredoc_len;
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index 712c592946..79054758e6 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -301,6 +301,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
CG(start_lineno) = 0;
} else {
CG(zend_lineno) = 1;
+ CG(shebang_len) = 0;
}
CG(increment_lineno) = 0;
@@ -450,7 +451,7 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_D
ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)
{
- size_t offset = SCNG(yy_cursor) - SCNG(yy_start);
+ size_t offset = (SCNG(yy_cursor) - SCNG(yy_start)) + CG(shebang_len);
#ifdef ZEND_MULTIBYTE
if (SCNG(input_filter)) {
size_t original_offset = offset, length = 0; do {
@@ -3514,7 +3515,7 @@ yy245:
++YYCURSOR;
YYDEBUG(246, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1291 "Zend/zend_language_scanner.l"
+#line 1292 "Zend/zend_language_scanner.l"
{
return T_SR_EQUAL;
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 6622cb3db6..eadc34d6ee 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -299,6 +299,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
CG(start_lineno) = 0;
} else {
CG(zend_lineno) = 1;
+ CG(shebang_len) = 0;
}
CG(increment_lineno) = 0;
@@ -448,7 +449,7 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_D
ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)
{
- size_t offset = SCNG(yy_cursor) - SCNG(yy_start);
+ size_t offset = (SCNG(yy_cursor) - SCNG(yy_start)) + CG(shebang_len);
#ifdef ZEND_MULTIBYTE
if (SCNG(input_filter)) {
size_t original_offset = offset, length = 0; do {
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index 4b47c41484..e5d3dba575 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -2093,8 +2093,10 @@ consult the installation file that came with this distribution, or visit \n\
fseek(file_handle.handle.fp, pos - 1, SEEK_SET);
}
}
+ CG(shebang_len) = ftell(file_handle.handle.fp);
CG(start_lineno) = 2;
} else {
+ CG(shebang_len) = 0;
rewind(file_handle.handle.fp);
}
}
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c
index 8856bf8e6c..c071b4dc65 100644
--- a/sapi/cli/php_cli.c
+++ b/sapi/cli/php_cli.c
@@ -652,8 +652,10 @@ static int cli_seek_file_begin(zend_file_handle *file_handle, char *script_file,
fseek(file_handle->handle.fp, pos - 1, SEEK_SET);
}
}
+ CG(shebang_len) = ftell(file_handle->handle.fp);
*lineno = 2;
} else {
+ CG(shebang_len) = 0;
rewind(file_handle->handle.fp);
}