From 4715403906a6ce35bb16bea710fb90796b95ae8a Mon Sep 17 00:00:00 2001 From: Andi Gutmans Date: Sat, 21 Jul 2001 15:11:30 +0000 Subject: [PATCH] - Fix __FILE__ in the main script in CGI/command line mode. --- main/fopen_wrappers.c | 25 ++++++++++++++++--------- main/fopen_wrappers.h | 3 ++- sapi/cgi/cgi_main.c | 11 ++++++----- sapi/servlet/servlet.c | 15 ++++++--------- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index c4c8e484e7..90b7cbc5ef 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -86,9 +86,6 @@ typedef FILE * (*php_fopen_url_wrapper_t) (const char *, char *, int, int *, int static FILE *php_fopen_url_wrapper(const char *, char *, int, int *, int *, char **); -PHPAPI char *expand_filepath(const char *filepath, char *real_path); - - HashTable fopen_url_wrappers_hash; /* {{{ php_register_url_wrapper @@ -250,7 +247,7 @@ static FILE *php_fopen_and_set_opened_path(const char *path, char *mode, char ** } fp = VCWD_FOPEN(path, mode); if (fp && opened_path) { - *opened_path = expand_filepath(path,NULL); + *opened_path = expand_filepath(path, NULL); } return fp; } @@ -288,7 +285,7 @@ PHPAPI FILE *php_fopen_wrapper(char *path, char *mode, int options, int *issock, /* {{{ php_fopen_primary_script */ -PHPAPI FILE *php_fopen_primary_script(void) +PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle) { FILE *fp; struct stat st; @@ -355,7 +352,8 @@ PHPAPI FILE *php_fopen_primary_script(void) we're not adding it in this case */ STR_FREE(SG(request_info).path_translated); SG(request_info).path_translated = NULL; - return NULL; + file_handle->handle.fp = NULL; + return FAILURE; } fp = VCWD_FOPEN(filename, "rb"); @@ -367,14 +365,23 @@ PHPAPI FILE *php_fopen_primary_script(void) if (!fp) { php_error(E_ERROR, "Unable to open %s", filename); STR_FREE(SG(request_info).path_translated); /* for same reason as above */ - return NULL; + file_handle->handle.fp = NULL; + return FAILURE; } + + file_handle->opened_path = expand_filepath(filename, NULL); + if (!(SG(options) & SAPI_OPTION_NO_CHDIR)) { VCWD_CHDIR_FILE(filename); } SG(request_info).path_translated = filename; - return fp; + file_handle->filename = SG(request_info).path_translated; + file_handle->free_filename = 0; + file_handle->handle.fp = fp; + file_handle->type = ZEND_HANDLE_FP; + + return SUCCESS; } /* }}} */ @@ -643,7 +650,7 @@ PHPAPI char *expand_filepath(const char *filepath, char *real_path) if(real_path) { int copy_len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length; - memcpy(real_path,new_state.cwd,copy_len); + memcpy(real_path, new_state.cwd, copy_len); real_path[copy_len]='\0'; } else { real_path = estrndup(new_state.cwd, new_state.cwd_length); diff --git a/main/fopen_wrappers.h b/main/fopen_wrappers.h index 0bb7880608..ee0040e338 100644 --- a/main/fopen_wrappers.h +++ b/main/fopen_wrappers.h @@ -66,7 +66,8 @@ PHPAPI FILE *php_fopen_wrapper(char *filename, char *mode, int options, int *issock, int *socketd, char **opened_path); -PHPAPI FILE *php_fopen_primary_script(void); +PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle); +PHPAPI char *expand_filepath(const char *filepath, char *real_path); PHPAPI int php_check_open_basedir(char *path); PHPAPI int php_check_specific_open_basedir(char *basedir, char *path PLS_DC); diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index e72483375d..a10a62293e 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -368,6 +368,7 @@ int main(int argc, char *argv[]) int exit_status = SUCCESS; int cgi = 0, c, i, len; zend_file_handle file_handle; + int retval = FAILURE; char *s; /* temporary locals */ int behavior=PHP_MODE_STANDARD; @@ -676,6 +677,7 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine file_handle.type = ZEND_HANDLE_FP; file_handle.handle.fp = stdin; file_handle.opened_path = NULL; + file_handle.free_filename = 0; /* This actually destructs the elements of the list - ugly hack */ zend_llist_apply(&global_vars, (llist_apply_func_t) php_register_command_line_global_vars); @@ -703,11 +705,10 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine } } if (cgi || SG(request_info).path_translated) { - file_handle.handle.fp = php_fopen_primary_script(); - file_handle.filename = SG(request_info).path_translated; + retval = php_fopen_primary_script(&file_handle); } - if (cgi && !file_handle.handle.fp) { + if (cgi && (retval == FAILURE)) { if(!argv0 || !(file_handle.handle.fp = VCWD_FOPEN(argv0, "rb"))) { PUTS("No input file specified.\n"); php_request_shutdown((void *) 0); @@ -715,7 +716,8 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine return FAILURE; } file_handle.filename = argv0; - } else if (file_handle.handle.fp && file_handle.handle.fp!=stdin) { + file_handle.opened_path = expand_filepath(argv0, NULL); + } else if (retval == SUCCESS) { /* #!php support */ c = fgetc(file_handle.handle.fp); if (c == '#') { @@ -728,7 +730,6 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine } } - file_handle.free_filename = 0; switch (behavior) { case PHP_MODE_STANDARD: exit_status = php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); diff --git a/sapi/servlet/servlet.c b/sapi/servlet/servlet.c index 385795e704..84d1493506 100644 --- a/sapi/servlet/servlet.c +++ b/sapi/servlet/servlet.c @@ -315,6 +315,7 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send jstring authUser, jboolean display_source_mode) { zend_file_handle file_handle; + int retval; #ifndef VIRTUAL_DIR char cwd[MAXPATHLEN]; #endif @@ -352,7 +353,7 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send */ SETSTRING( SG(request_info).path_translated, pathTranslated ); #ifdef VIRTUAL_DIR - file_handle.handle.fp = php_fopen_primary_script(); + retval = php_fopen_primary_script(&file_handle); #else /* * The java runtime doesn't like the working directory to be @@ -360,15 +361,11 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send * in the hopes that Java doesn't notice. */ getcwd(cwd,MAXPATHLEN); - file_handle.handle.fp = php_fopen_primary_script(); + retval = php_fopen_primary_script(&file_handle); chdir(cwd); #endif - file_handle.filename = SG(request_info).path_translated; - file_handle.opened_path = NULL; - file_handle.free_filename = 0; - file_handle.type = ZEND_HANDLE_FP; - - if (!file_handle.handle.fp) { + + if (retval == FAILURE) { php_request_shutdown((void *) 0); php_module_shutdown(); ThrowIOException(jenv,file_handle.filename); @@ -385,7 +382,7 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send if (open_file_for_scanning(&file_handle CLS_CC)==SUCCESS) { php_get_highlight_struct(&syntax_highlighter_ini); - sapi_send_headers(); + sapi_send_headers(); zend_highlight(&syntax_highlighter_ini); } } else { -- 2.50.1