]> granicus.if.org Git - php/commitdiff
Provide means for opening file for zend with error supression. Allows us to
authorIlia Alshanetsky <iliaa@php.net>
Mon, 8 Jan 2007 03:39:09 +0000 (03:39 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 8 Jan 2007 03:39:09 +0000 (03:39 +0000)
avoid INI hackery such as the one used in SPL.

ext/spl/php_spl.c
main/main.c
main/php_main.h

index 01395e8d4f4d4d5ad8284fb25cbcc3b292d5e4e4..7029139c67a3fb2a260ea5fbda91fe404fa63512 100755 (executable)
@@ -24,6 +24,7 @@
 
 #include "php.h"
 #include "php_ini.h"
+#include "php_main.h"
 #include "ext/standard/info.h"
 #include "php_spl.h"
 #include "spl_functions.h"
@@ -207,7 +208,7 @@ PHP_FUNCTION(spl_classes)
 }
 /* }}} */
 
-int spl_autoload(const char *class_name, const char * lc_name, int class_name_len, const char * file_extension TSRMLS_DC) /* {{{ */
+static int spl_autoload(const char *class_name, const char * lc_name, int class_name_len, const char * file_extension TSRMLS_DC) /* {{{ */
 {
        char *class_file;
        int class_file_len;
@@ -215,23 +216,11 @@ int spl_autoload(const char *class_name, const char * lc_name, int class_name_le
        zend_file_handle file_handle;
        zend_op_array *new_op_array;
        zval *result = NULL;
-       zval err_mode;
        int ret;
 
        class_file_len = spprintf(&class_file, 0, "%s%s", lc_name, file_extension);
 
-       ZVAL_LONG(&err_mode, EG(error_reporting));
-       if (Z_LVAL(err_mode)) {
-               php_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
-       }
-
-       ret = zend_stream_open(class_file, &file_handle TSRMLS_CC);
-
-       if (!EG(error_reporting) && Z_LVAL(err_mode) != EG(error_reporting)) {
-               convert_to_string(&err_mode);
-               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(err_mode), Z_STRLEN(err_mode), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
-               zendi_zval_dtor(err_mode);
-       }
+       ret = php_stream_open_for_zend_ex(class_file, &file_handle, ENFORCE_SAFE_MODE|USE_PATH|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC);
 
        if (ret == SUCCESS) {
                if (!file_handle.opened_path) {
index cab5bb4d9a1f242bc09dcd057adbca27fcec7460..9e6794b71843bb0b28c046a7db215aeab7c6f803 100644 (file)
@@ -903,10 +903,15 @@ static long stream_fteller_for_zend(void *handle TSRMLS_DC)
 }
 
 static int php_stream_open_for_zend(const char *filename, zend_file_handle *handle TSRMLS_DC)
+{
+       return php_stream_open_for_zend_ex(filename, handle, ENFORCE_SAFE_MODE|USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC);
+}
+
+PHPAPI int php_stream_open_for_zend_ex(const char *filename, zend_file_handle *handle, int mode TSRMLS_DC)
 {
        php_stream *stream;
 
-       stream = php_stream_open_wrapper((char *)filename, "rb", ENFORCE_SAFE_MODE|USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, &handle->opened_path);
+       stream = php_stream_open_wrapper((char *)filename, "rb", mode, &handle->opened_path);
 
        if (stream) {
                handle->type = ZEND_HANDLE_STREAM;
@@ -925,7 +930,6 @@ static int php_stream_open_for_zend(const char *filename, zend_file_handle *hand
        return FAILURE;
 }
 
-
 /* {{{ php_get_configuration_directive_for_zend
  */
 static int php_get_configuration_directive_for_zend(char *name, uint name_length, zval *contents)
index 8ec823f66d69ffbd03612b39d560b6a518a5fc81..01a1bce420f9ef42382d5ced26c111192d7064a0 100644 (file)
@@ -47,6 +47,7 @@ PHPAPI void php_handle_aborted_connection(void);
 PHPAPI int php_handle_auth_data(const char *auth TSRMLS_DC);
 
 PHPAPI void php_html_puts(const char *str, uint siz TSRMLS_DC);
+PHPAPI int php_stream_open_for_zend_ex(const char *filename, zend_file_handle *handle, int mode TSRMLS_DC);
 
 extern void php_call_shutdown_functions(TSRMLS_D);
 extern void php_free_shutdown_functions(TSRMLS_D);