]> granicus.if.org Git - php/commitdiff
Add some error checking when stream converters are instantiated.
authorSara Golemon <pollita@php.net>
Fri, 24 Mar 2006 00:19:39 +0000 (00:19 +0000)
committerSara Golemon <pollita@php.net>
Fri, 24 Mar 2006 00:19:39 +0000 (00:19 +0000)
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...

main/streams/streams.c

index 8c2ee97855c75397cd2afda443e971d845e2add1..597ce80f382783f7f92219951b97fb6154e81f90 100755 (executable)
@@ -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);
+                       }
                }
        }