From: Sara Golemon Date: Fri, 24 Mar 2006 00:19:39 +0000 (+0000) Subject: Add some error checking when stream converters are instantiated. X-Git-Tag: RELEASE_1_3~283 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eb44e642b15aaa63b46e43c64c41d8946adfd1d3;p=php Add some error checking when stream converters are instantiated. Use the global conversion error handlers for output conversion (for now) We may want to make this customizable on a per-stream basis via context param later on... --- diff --git a/main/streams/streams.c b/main/streams/streams.c index 8c2ee97855..597ce80f38 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -2205,11 +2205,45 @@ PHPAPI php_stream *_php_stream_open_wrapper_ex(char *path, char *mode, int optio UErrorCode status = U_ZERO_ERROR; stream->output_encoding = ucnv_open(encoding, &status); + switch (U_FAILURE(status)) { + case U_ZERO_ERROR: + /* UTODO: (Maybe?) Allow overriding the default error handlers on a per-stream basis via context params */ + zend_set_converter_error_mode(stream->output_encoding, UG(from_u_error_mode)); + zend_set_converter_subst_char(stream->output_encoding, UG(subst_char), UG(subst_char_len)); + break; + case U_MEMORY_ALLOCATION_ERROR: + php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, + "Unable to allocate memory for unicode output converter: %s", encoding); + break; + case U_FILE_ACCESS_ERROR: + php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, + "Error loading unicode output converter: %s", encoding); + break; + default: + php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, + "Unknown error starting unicode output converter: %s", encoding); + } } if (strchr(implicit_mode, 'r') || strchr(implicit_mode, '+')) { char *encoding = (context && context->input_encoding) ? context->input_encoding : "utf8"; UErrorCode status = U_ZERO_ERROR; stream->input_encoding = ucnv_open(encoding, &status); + switch (U_FAILURE(status)) { + case U_ZERO_ERROR: + /* UTODO: If/When Input error handling gets implemented, set the options here */ + break; + case U_MEMORY_ALLOCATION_ERROR: + php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, + "Unable to allocate memory for unicode input converter: %s", encoding); + break; + case U_FILE_ACCESS_ERROR: + php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, + "Error loading unicode input converter: %s", encoding); + break; + default: + php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, + "Unknown error starting unicode input converter: %s", encoding); + } } }