diff options
author | Felipe Pena <felipe@php.net> | 2010-06-27 21:46:16 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2010-06-27 21:46:16 +0000 |
commit | 3396a6d18522f26d315e2ee59c130d02e2ae14b2 (patch) | |
tree | 9e8ae1b64af6991d4a573d97545e4aa50b7a8032 | |
parent | cb6bf19bfaff871c10dbccc5e8149f89d99983d3 (diff) | |
download | php-git-3396a6d18522f26d315e2ee59c130d02e2ae14b2.tar.gz |
- Fixed bug #48930 (__COMPILER_HALT_OFFSET__ incorrect in PHP >= 5.3)
-rw-r--r-- | Zend/tests/bug48930.phpt | 16 | ||||
-rw-r--r-- | Zend/zend_globals.h | 1 | ||||
-rw-r--r-- | Zend/zend_language_scanner.c | 5 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 3 | ||||
-rw-r--r-- | sapi/cgi/cgi_main.c | 2 | ||||
-rw-r--r-- | sapi/cli/php_cli.c | 2 |
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); } |