[PHP-CVS] cvs: php-src(PHP_4_4) /ext/mbstring mbstring.c mbstring.h /ext/mbstring/libmbfl/mbfl mbfilter.c
masugataMon Apr 3 13:04:13 2006 UTC Modified files: (Branch: PHP_4_4) /php-src/ext/mbstring mbstring.c mbstring.h /php-src/ext/mbstring/libmbfl/mbfl mbfilter.c Log: added mb_check_encoding( ). detect possible invalid encoding attack(avoids a security issue). http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.c?r1=1.142.2.47.2.16r2=1.142.2.47.2.17diff_format=u Index: php-src/ext/mbstring/mbstring.c diff -u php-src/ext/mbstring/mbstring.c:1.142.2.47.2.16 php-src/ext/mbstring/mbstring.c:1.142.2.47.2.17 --- php-src/ext/mbstring/mbstring.c:1.142.2.47.2.16 Thu Mar 23 02:17:42 2006 +++ php-src/ext/mbstring/mbstring.c Mon Apr 3 13:04:13 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: mbstring.c,v 1.142.2.47.2.16 2006/03/23 02:17:42 masugata Exp $ */ +/* $Id: mbstring.c,v 1.142.2.47.2.17 2006/04/03 13:04:13 masugata Exp $ */ /* * PHP4 Multibyte String module mbstring @@ -253,6 +253,7 @@ PHP_FE(mb_decode_numericentity, NULL) PHP_FE(mb_send_mail,NULL) PHP_FE(mb_get_info, NULL) + PHP_FE(mb_check_encoding, NULL) PHP_FALIAS(mbstrlen,mb_strlen, NULL) PHP_FALIAS(mbstrpos,mb_strpos, NULL) PHP_FALIAS(mbstrrpos, mb_strrpos, NULL) @@ -3812,6 +3813,65 @@ } /* }}} */ +/* {{{ proto bool mb_check_encoding([string var[, string encoding]]) + Check if the string is valid for the specified encoding */ +PHP_FUNCTION(mb_check_encoding) +{ + char *var = NULL; + int var_len; + char *enc = NULL; + int enc_len; + mbfl_buffer_converter *convd; + enum mbfl_no_encoding no_encoding = MBSTRG(current_internal_encoding); + mbfl_string string, result, *ret = NULL; + long illegalchars = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |ss, var, var_len, enc, enc_len) == FAILURE) { + RETURN_FALSE; + } + + if (var == NULL) { + RETURN_BOOL(MBSTRG(illegalchars) == 0); + } + + if (enc != NULL) { + no_encoding = mbfl_name2no_encoding(enc); + if (no_encoding == mbfl_no_encoding_invalid || no_encoding == mbfl_no_encoding_pass) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Invalid encoding \%s\, enc); + RETURN_FALSE; + } + } + + convd = mbfl_buffer_converter_new(no_encoding, no_encoding, 0); + if (convd == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to create converter); + RETURN_FALSE; + } + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + + /* initialize string */ + mbfl_string_init(string); + mbfl_string_init(result); + string.no_encoding = no_encoding; + string.no_language = MBSTRG(current_language); + + string.val = (unsigned char *)var; + string.len = var_len; + ret = mbfl_buffer_converter_feed_result(convd, string, result); + illegalchars = mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + + if (ret != NULL) { + MBSTRG(illegalchars) += illegalchars; + efree(ret-val); + RETURN_BOOL(illegalchars == 0); + } else { + RETURN_FALSE; + } +} +/* }}} */ + /* {{{ MBSTRING_API int php_mb_encoding_translation() */ MBSTRING_API int php_mb_encoding_translation(TSRMLS_D) { http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.h?r1=1.40.2.12.4.4r2=1.40.2.12.4.5diff_format=u Index: php-src/ext/mbstring/mbstring.h diff -u php-src/ext/mbstring/mbstring.h:1.40.2.12.4.4 php-src/ext/mbstring/mbstring.h:1.40.2.12.4.5 --- php-src/ext/mbstring/mbstring.h:1.40.2.12.4.4 Thu Mar 23 02:17:42 2006 +++ php-src/ext/mbstring/mbstring.h Mon Apr 3 13:04:13 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: mbstring.h,v 1.40.2.12.4.4 2006/03/23 02:17:42 masugata Exp $ */ +/* $Id: mbstring.h,v 1.40.2.12.4.5 2006/04/03 13:04:13 masugata Exp $ */ /* * PHP4 Multibyte String module mbstring (currently only for Japanese) @@ -117,6 +117,7 @@ PHP_FUNCTION(mb_decode_numericentity); PHP_FUNCTION(mb_send_mail); PHP_FUNCTION(mb_get_info); +PHP_FUNCTION(mb_check_encoding); MBSTRING_API int php_mb_encoding_translation(TSRMLS_D); http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c?r1=1.1.2.7.2.5r2=1.1.2.7.2.6diff_format=u Index: php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c diff -u php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c:1.1.2.7.2.5
Re: [PHP-CVS] cvs: php-src(PHP_4_4) /ext/mbstring mbstring.c mbstring.h /ext/mbstring/libmbfl/mbfl mbfilter.c
Derick, Seiji Masugata wrote: masugata Mon Apr 3 13:04:13 2006 UTC Modified files: (Branch: PHP_4_4) /php-src/ext/mbstring mbstring.c mbstring.h /php-src/ext/mbstring/libmbfl/mbflmbfilter.c Log: added mb_check_encoding( ). detect possible invalid encoding attack(avoids a security issue). There was a contact from Rui. Make apply this function to the PHP4_4 Branch. http://news.php.net/php.cvs/37387 http://news.php.net/php.cvs/37437 This function is necessary to detect possible invalid encoding attack(avoids a security issue). There was no reply afterwards though it reported directly from Rui to Derick. Therefore, Rui thinks can apply to PHP4_4 Branch. I reverted without knowing this thing. Compatibility is secured. Therefore, there is not an influence. Thank you. -- Seiji Masugata http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.c?r1=1.142.2.47.2.16r2=1.142.2.47.2.17diff_format=u Index: php-src/ext/mbstring/mbstring.c diff -u php-src/ext/mbstring/mbstring.c:1.142.2.47.2.16 php-src/ext/mbstring/mbstring.c:1.142.2.47.2.17 --- php-src/ext/mbstring/mbstring.c:1.142.2.47.2.16 Thu Mar 23 02:17:42 2006 +++ php-src/ext/mbstring/mbstring.c Mon Apr 3 13:04:13 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: mbstring.c,v 1.142.2.47.2.16 2006/03/23 02:17:42 masugata Exp $ */ +/* $Id: mbstring.c,v 1.142.2.47.2.17 2006/04/03 13:04:13 masugata Exp $ */ /* * PHP4 Multibyte String module mbstring @@ -253,6 +253,7 @@ PHP_FE(mb_decode_numericentity, NULL) PHP_FE(mb_send_mail,NULL) PHP_FE(mb_get_info, NULL) + PHP_FE(mb_check_encoding, NULL) PHP_FALIAS(mbstrlen,mb_strlen, NULL) PHP_FALIAS(mbstrpos,mb_strpos, NULL) PHP_FALIAS(mbstrrpos, mb_strrpos, NULL) @@ -3812,6 +3813,65 @@ } /* }}} */ +/* {{{ proto bool mb_check_encoding([string var[, string encoding]]) + Check if the string is valid for the specified encoding */ +PHP_FUNCTION(mb_check_encoding) +{ + char *var = NULL; + int var_len; + char *enc = NULL; + int enc_len; + mbfl_buffer_converter *convd; + enum mbfl_no_encoding no_encoding = MBSTRG(current_internal_encoding); + mbfl_string string, result, *ret = NULL; + long illegalchars = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |ss, var, var_len, enc, enc_len) == FAILURE) { + RETURN_FALSE; + } + + if (var == NULL) { + RETURN_BOOL(MBSTRG(illegalchars) == 0); + } + + if (enc != NULL) { + no_encoding = mbfl_name2no_encoding(enc); + if (no_encoding == mbfl_no_encoding_invalid || no_encoding == mbfl_no_encoding_pass) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Invalid encoding \%s\, enc); + RETURN_FALSE; + } + } + + convd = mbfl_buffer_converter_new(no_encoding, no_encoding, 0); + if (convd == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to create converter); + RETURN_FALSE; + } + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + + /* initialize string */ + mbfl_string_init(string); + mbfl_string_init(result); + string.no_encoding = no_encoding; + string.no_language = MBSTRG(current_language); + + string.val = (unsigned char *)var; + string.len = var_len; + ret = mbfl_buffer_converter_feed_result(convd, string, result); + illegalchars = mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + + if (ret != NULL) { + MBSTRG(illegalchars) += illegalchars; + efree(ret-val); + RETURN_BOOL(illegalchars == 0); + } else { + RETURN_FALSE; + } +} +/* }}} */ + /* {{{ MBSTRING_API int php_mb_encoding_translation() */ MBSTRING_API int php_mb_encoding_translation(TSRMLS_D) { http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.h?r1=1.40.2.12.4.4r2=1.40.2.12.4.5diff_format=u Index: php-src/ext/mbstring/mbstring.h diff -u php-src/ext/mbstring/mbstring.h:1.40.2.12.4.4 php-src/ext/mbstring/mbstring.h:1.40.2.12.4.5 --- php-src/ext/mbstring/mbstring.h:1.40.2.12.4.4 Thu Mar 23 02:17:42 2006 +++ php-src/ext/mbstring/mbstring.h Mon Apr 3 13:04:13 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: mbstring.h,v 1.40.2.12.4.4 2006/03/23 02:17:42 masugata Exp $ */ +/* $Id: mbstring.h,v 1.40.2.12.4.5 2006/04/03 13:04:13 masugata Exp $ */
[PHP-CVS] cvs: php-src(PHP_4_4) /ext/mbstring mbstring.c mbstring.h /ext/mbstring/libmbfl/mbfl mbfilter.c
masugataThu Mar 23 02:17:43 2006 UTC Modified files: (Branch: PHP_4_4) /php-src/ext/mbstring mbstring.c mbstring.h /php-src/ext/mbstring/libmbfl/mbfl mbfilter.c Log: revert.(See http://news.php.net/php.cvs/37387) http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.c?r1=1.142.2.47.2.15r2=1.142.2.47.2.16diff_format=u Index: php-src/ext/mbstring/mbstring.c diff -u php-src/ext/mbstring/mbstring.c:1.142.2.47.2.15 php-src/ext/mbstring/mbstring.c:1.142.2.47.2.16 --- php-src/ext/mbstring/mbstring.c:1.142.2.47.2.15 Tue Mar 21 08:00:55 2006 +++ php-src/ext/mbstring/mbstring.c Thu Mar 23 02:17:42 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: mbstring.c,v 1.142.2.47.2.15 2006/03/21 08:00:55 hirokawa Exp $ */ +/* $Id: mbstring.c,v 1.142.2.47.2.16 2006/03/23 02:17:42 masugata Exp $ */ /* * PHP4 Multibyte String module mbstring @@ -253,7 +253,6 @@ PHP_FE(mb_decode_numericentity, NULL) PHP_FE(mb_send_mail,NULL) PHP_FE(mb_get_info, NULL) - PHP_FE(mb_check_encoding, NULL) PHP_FALIAS(mbstrlen,mb_strlen, NULL) PHP_FALIAS(mbstrpos,mb_strpos, NULL) PHP_FALIAS(mbstrrpos, mb_strrpos, NULL) @@ -3813,67 +3812,6 @@ } /* }}} */ -/* {{{ proto bool mb_check_encoding([string var[, string encoding]]) - Check if the string is valid for the specified encoding */ -PHP_FUNCTION(mb_check_encoding) -{ - char *var = NULL; - int var_len; - char *enc = NULL; - int enc_len; - char *name; - mbfl_buffer_converter *convd; - enum mbfl_no_encoding no_encoding = MBSTRG(current_internal_encoding); - zval *row; - mbfl_string string, result, *ret = NULL; - long illegalchars = 0; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |ss, var, var_len, enc, enc_len) == FAILURE) { - RETURN_FALSE; - } - - if (var == NULL) { - RETURN_BOOL(MBSTRG(illegalchars) == 0); - } - - if (enc != NULL) { - no_encoding = mbfl_name2no_encoding(enc); - if (no_encoding == mbfl_no_encoding_invalid || no_encoding == mbfl_no_encoding_pass) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, Invalid encoding \%s\, enc); - RETURN_FALSE; - } - } - - convd = mbfl_buffer_converter_new(no_encoding, no_encoding, 0); - if (convd == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to create converter); - RETURN_FALSE; - } - mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); - mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); - - /* initialize string */ - mbfl_string_init(string); - mbfl_string_init(result); - string.no_encoding = no_encoding; - string.no_language = MBSTRG(current_language); - - string.val = (unsigned char *)var; - string.len = var_len; - ret = mbfl_buffer_converter_feed_result(convd, string, result); - illegalchars = mbfl_buffer_illegalchars(convd); - mbfl_buffer_converter_delete(convd); - - if (ret != NULL) { - MBSTRG(illegalchars) += illegalchars; - efree(ret-val); - RETURN_BOOL(illegalchars == 0); - } else { - RETURN_FALSE; - } -} -/* }}} */ - /* {{{ MBSTRING_API int php_mb_encoding_translation() */ MBSTRING_API int php_mb_encoding_translation(TSRMLS_D) { http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.h?r1=1.40.2.12.4.3r2=1.40.2.12.4.4diff_format=u Index: php-src/ext/mbstring/mbstring.h diff -u php-src/ext/mbstring/mbstring.h:1.40.2.12.4.3 php-src/ext/mbstring/mbstring.h:1.40.2.12.4.4 --- php-src/ext/mbstring/mbstring.h:1.40.2.12.4.3 Tue Mar 21 08:00:55 2006 +++ php-src/ext/mbstring/mbstring.h Thu Mar 23 02:17:42 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: mbstring.h,v 1.40.2.12.4.3 2006/03/21 08:00:55 hirokawa Exp $ */ +/* $Id: mbstring.h,v 1.40.2.12.4.4 2006/03/23 02:17:42 masugata Exp $ */ /* * PHP4 Multibyte String module mbstring (currently only for Japanese) @@ -117,7 +117,6 @@ PHP_FUNCTION(mb_decode_numericentity); PHP_FUNCTION(mb_send_mail); PHP_FUNCTION(mb_get_info); -PHP_FUNCTION(mb_check_encoding); MBSTRING_API int php_mb_encoding_translation(TSRMLS_D); http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c?r1=1.1.2.7.2.4r2=1.1.2.7.2.5diff_format=u Index: php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c diff -u php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c:1.1.2.7.2.4
[PHP-CVS] cvs: php-src(PHP_4_4) /ext/mbstring mbstring.c mbstring.h /ext/mbstring/libmbfl/mbfl mbfilter.c
hirokawaTue Mar 21 08:00:55 2006 UTC Modified files: (Branch: PHP_4_4) /php-src/ext/mbstring mbstring.c mbstring.h /php-src/ext/mbstring/libmbfl/mbfl mbfilter.c Log: MFH http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.c?r1=1.142.2.47.2.14r2=1.142.2.47.2.15diff_format=u Index: php-src/ext/mbstring/mbstring.c diff -u php-src/ext/mbstring/mbstring.c:1.142.2.47.2.14 php-src/ext/mbstring/mbstring.c:1.142.2.47.2.15 --- php-src/ext/mbstring/mbstring.c:1.142.2.47.2.14 Tue Mar 21 02:49:09 2006 +++ php-src/ext/mbstring/mbstring.c Tue Mar 21 08:00:55 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: mbstring.c,v 1.142.2.47.2.14 2006/03/21 02:49:09 hirokawa Exp $ */ +/* $Id: mbstring.c,v 1.142.2.47.2.15 2006/03/21 08:00:55 hirokawa Exp $ */ /* * PHP4 Multibyte String module mbstring @@ -253,6 +253,7 @@ PHP_FE(mb_decode_numericentity, NULL) PHP_FE(mb_send_mail,NULL) PHP_FE(mb_get_info, NULL) + PHP_FE(mb_check_encoding, NULL) PHP_FALIAS(mbstrlen,mb_strlen, NULL) PHP_FALIAS(mbstrpos,mb_strpos, NULL) PHP_FALIAS(mbstrrpos, mb_strrpos, NULL) @@ -3812,6 +3813,67 @@ } /* }}} */ +/* {{{ proto bool mb_check_encoding([string var[, string encoding]]) + Check if the string is valid for the specified encoding */ +PHP_FUNCTION(mb_check_encoding) +{ + char *var = NULL; + int var_len; + char *enc = NULL; + int enc_len; + char *name; + mbfl_buffer_converter *convd; + enum mbfl_no_encoding no_encoding = MBSTRG(current_internal_encoding); + zval *row; + mbfl_string string, result, *ret = NULL; + long illegalchars = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |ss, var, var_len, enc, enc_len) == FAILURE) { + RETURN_FALSE; + } + + if (var == NULL) { + RETURN_BOOL(MBSTRG(illegalchars) == 0); + } + + if (enc != NULL) { + no_encoding = mbfl_name2no_encoding(enc); + if (no_encoding == mbfl_no_encoding_invalid || no_encoding == mbfl_no_encoding_pass) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Invalid encoding \%s\, enc); + RETURN_FALSE; + } + } + + convd = mbfl_buffer_converter_new(no_encoding, no_encoding, 0); + if (convd == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to create converter); + RETURN_FALSE; + } + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + + /* initialize string */ + mbfl_string_init(string); + mbfl_string_init(result); + string.no_encoding = no_encoding; + string.no_language = MBSTRG(current_language); + + string.val = (unsigned char *)var; + string.len = var_len; + ret = mbfl_buffer_converter_feed_result(convd, string, result); + illegalchars = mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + + if (ret != NULL) { + MBSTRG(illegalchars) += illegalchars; + efree(ret-val); + RETURN_BOOL(illegalchars == 0); + } else { + RETURN_FALSE; + } +} +/* }}} */ + /* {{{ MBSTRING_API int php_mb_encoding_translation() */ MBSTRING_API int php_mb_encoding_translation(TSRMLS_D) { http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.h?r1=1.40.2.12.4.2r2=1.40.2.12.4.3diff_format=u Index: php-src/ext/mbstring/mbstring.h diff -u php-src/ext/mbstring/mbstring.h:1.40.2.12.4.2 php-src/ext/mbstring/mbstring.h:1.40.2.12.4.3 --- php-src/ext/mbstring/mbstring.h:1.40.2.12.4.2 Tue Mar 21 02:49:09 2006 +++ php-src/ext/mbstring/mbstring.h Tue Mar 21 08:00:55 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: mbstring.h,v 1.40.2.12.4.2 2006/03/21 02:49:09 hirokawa Exp $ */ +/* $Id: mbstring.h,v 1.40.2.12.4.3 2006/03/21 08:00:55 hirokawa Exp $ */ /* * PHP4 Multibyte String module mbstring (currently only for Japanese) @@ -117,6 +117,7 @@ PHP_FUNCTION(mb_decode_numericentity); PHP_FUNCTION(mb_send_mail); PHP_FUNCTION(mb_get_info); +PHP_FUNCTION(mb_check_encoding); MBSTRING_API int php_mb_encoding_translation(TSRMLS_D); http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c?r1=1.1.2.7.2.3r2=1.1.2.7.2.4diff_format=u Index: php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c diff -u php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c:1.1.2.7.2.3 php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c:1.1.2.7.2.4 ---
Re: [PHP-CVS] cvs: php-src(PHP_4_4) /ext/mbstring mbstring.c mbstring.h /ext/mbstring/libmbfl/mbfl mbfilter.c
On Tue, 21 Mar 2006, Rui Hirokawa wrote: hirokawa Tue Mar 21 08:00:55 2006 UTC Modified files: (Branch: PHP_4_4) /php-src/ext/mbstring mbstring.c mbstring.h /php-src/ext/mbstring/libmbfl/mbflmbfilter.c Log: MFH Please revert this. You can not add new functions to PHP 4.4.x. regards, Derick http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.c?r1=1.142.2.47.2.14r2=1.142.2.47.2.15diff_format=u Index: php-src/ext/mbstring/mbstring.c diff -u php-src/ext/mbstring/mbstring.c:1.142.2.47.2.14 php-src/ext/mbstring/mbstring.c:1.142.2.47.2.15 --- php-src/ext/mbstring/mbstring.c:1.142.2.47.2.14 Tue Mar 21 02:49:09 2006 +++ php-src/ext/mbstring/mbstring.c Tue Mar 21 08:00:55 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: mbstring.c,v 1.142.2.47.2.14 2006/03/21 02:49:09 hirokawa Exp $ */ +/* $Id: mbstring.c,v 1.142.2.47.2.15 2006/03/21 08:00:55 hirokawa Exp $ */ /* * PHP4 Multibyte String module mbstring @@ -253,6 +253,7 @@ PHP_FE(mb_decode_numericentity, NULL) PHP_FE(mb_send_mail,NULL) PHP_FE(mb_get_info, NULL) + PHP_FE(mb_check_encoding, NULL) PHP_FALIAS(mbstrlen,mb_strlen, NULL) PHP_FALIAS(mbstrpos,mb_strpos, NULL) PHP_FALIAS(mbstrrpos, mb_strrpos, NULL) @@ -3812,6 +3813,67 @@ } /* }}} */ +/* {{{ proto bool mb_check_encoding([string var[, string encoding]]) + Check if the string is valid for the specified encoding */ +PHP_FUNCTION(mb_check_encoding) +{ + char *var = NULL; + int var_len; + char *enc = NULL; + int enc_len; + char *name; + mbfl_buffer_converter *convd; + enum mbfl_no_encoding no_encoding = MBSTRG(current_internal_encoding); + zval *row; + mbfl_string string, result, *ret = NULL; + long illegalchars = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |ss, var, var_len, enc, enc_len) == FAILURE) { + RETURN_FALSE; + } + + if (var == NULL) { + RETURN_BOOL(MBSTRG(illegalchars) == 0); + } + + if (enc != NULL) { + no_encoding = mbfl_name2no_encoding(enc); + if (no_encoding == mbfl_no_encoding_invalid || no_encoding == mbfl_no_encoding_pass) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Invalid encoding \%s\, enc); + RETURN_FALSE; + } + } + + convd = mbfl_buffer_converter_new(no_encoding, no_encoding, 0); + if (convd == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to create converter); + RETURN_FALSE; + } + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + + /* initialize string */ + mbfl_string_init(string); + mbfl_string_init(result); + string.no_encoding = no_encoding; + string.no_language = MBSTRG(current_language); + + string.val = (unsigned char *)var; + string.len = var_len; + ret = mbfl_buffer_converter_feed_result(convd, string, result); + illegalchars = mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + + if (ret != NULL) { + MBSTRG(illegalchars) += illegalchars; + efree(ret-val); + RETURN_BOOL(illegalchars == 0); + } else { + RETURN_FALSE; + } +} +/* }}} */ + /* {{{ MBSTRING_API int php_mb_encoding_translation() */ MBSTRING_API int php_mb_encoding_translation(TSRMLS_D) { http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.h?r1=1.40.2.12.4.2r2=1.40.2.12.4.3diff_format=u Index: php-src/ext/mbstring/mbstring.h diff -u php-src/ext/mbstring/mbstring.h:1.40.2.12.4.2 php-src/ext/mbstring/mbstring.h:1.40.2.12.4.3 --- php-src/ext/mbstring/mbstring.h:1.40.2.12.4.2 Tue Mar 21 02:49:09 2006 +++ php-src/ext/mbstring/mbstring.h Tue Mar 21 08:00:55 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: mbstring.h,v 1.40.2.12.4.2 2006/03/21 02:49:09 hirokawa Exp $ */ +/* $Id: mbstring.h,v 1.40.2.12.4.3 2006/03/21 08:00:55 hirokawa Exp $ */ /* * PHP4 Multibyte String module mbstring (currently only for Japanese) @@ -117,6 +117,7 @@ PHP_FUNCTION(mb_decode_numericentity); PHP_FUNCTION(mb_send_mail); PHP_FUNCTION(mb_get_info); +PHP_FUNCTION(mb_check_encoding); MBSTRING_API int php_mb_encoding_translation(TSRMLS_D); http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c?r1=1.1.2.7.2.3r2=1.1.2.7.2.4diff_format=u Index: php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c diff
[PHP-CVS] cvs: php-src(PHP_4_4) /ext/mbstring mbstring.c mbstring.h /ext/mbstring/libmbfl/mbfl mbfilter.c mbfilter.h mbfl_convert.c mbfl_convert.h
hirokawaTue Mar 21 02:49:09 2006 UTC Modified files: (Branch: PHP_4_4) /php-src/ext/mbstring mbstring.c mbstring.h /php-src/ext/mbstring/libmbfl/mbfl mbfilter.c mbfilter.h mbfl_convert.c mbfl_convert.h Log: MFH. http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.c?r1=1.142.2.47.2.13r2=1.142.2.47.2.14diff_format=u Index: php-src/ext/mbstring/mbstring.c diff -u php-src/ext/mbstring/mbstring.c:1.142.2.47.2.13 php-src/ext/mbstring/mbstring.c:1.142.2.47.2.14 --- php-src/ext/mbstring/mbstring.c:1.142.2.47.2.13 Sat Mar 18 05:52:33 2006 +++ php-src/ext/mbstring/mbstring.c Tue Mar 21 02:49:09 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: mbstring.c,v 1.142.2.47.2.13 2006/03/18 05:52:33 masugata Exp $ */ +/* $Id: mbstring.c,v 1.142.2.47.2.14 2006/03/21 02:49:09 hirokawa Exp $ */ /* * PHP4 Multibyte String module mbstring @@ -854,6 +854,7 @@ MBSTRG(filter_illegal_substchar) = 0x3f;/* '?' */ MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; MBSTRG(current_filter_illegal_substchar) = 0x3f;/* '?' */ + MBSTRG(illegalchars) = 0; MBSTRG(func_overload) = 0; MBSTRG(encoding_translation) = 0; pglobals-outconv = NULL; @@ -1011,6 +1012,7 @@ MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding); MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode); MBSTRG(current_filter_illegal_substchar) = MBSTRG(filter_illegal_substchar); + MBSTRG(illegalchars) = 0; n = 0; if (MBSTRG(detect_order_list)) { @@ -1078,6 +1080,7 @@ MBSTRG(current_detect_order_list_size) = 0; } if (MBSTRG(outconv) != NULL) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv)); mbfl_buffer_converter_delete(MBSTRG(outconv)); MBSTRG(outconv) = NULL; } @@ -1627,6 +1630,7 @@ } if (convd != NULL) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); mbfl_buffer_converter_delete(convd); } if (val_list != NULL) { @@ -1978,6 +1982,7 @@ PG(register_globals) = old_rg; if (convd != NULL) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); mbfl_buffer_converter_delete(convd); } efree((void *)str_list); @@ -2015,6 +2020,7 @@ if ((arg_status PHP_OUTPUT_HANDLER_START) != 0) { /* delete the converter just in case. */ if (MBSTRG(outconv)) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv)); mbfl_buffer_converter_delete(MBSTRG(outconv)); MBSTRG(outconv) = NULL; } @@ -2079,6 +2085,7 @@ /* delete the converter if it is the last feed. */ if (last_feed) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv)); mbfl_buffer_converter_delete(MBSTRG(outconv)); MBSTRG(outconv) = NULL; } @@ -2711,6 +2718,7 @@ output = (char *)ret-val; } + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); mbfl_buffer_converter_delete(convd); return output; } @@ -3376,6 +3384,7 @@ } efree(stack); } + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); mbfl_buffer_converter_delete(convd); } @@ -3795,6 +3804,8 @@ if (lang != NULL (name = (char *)mbfl_no_encoding2name(lang-mail_body_encoding)) != NULL) { RETVAL_STRING(name, 1); } + } else if (!strcasecmp(illegal_chars, typ)) { + RETVAL_LONG(MBSTRG(illegalchars)); } else { RETURN_FALSE; } @@ -3961,6 +3972,7 @@ str[i] = ret-val; len[i] = ret-len; } + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); mbfl_buffer_converter_delete(convd); } return ret ? 0 : -1; @@ -4184,6 +4196,7 @@ *to = ret-val; *to_length = ret-len; } + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); mbfl_buffer_converter_delete(convd); return ret ? 0 : -1; http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.h?r1=1.40.2.12.4.1r2=1.40.2.12.4.2diff_format=u Index: php-src/ext/mbstring/mbstring.h diff -u php-src/ext/mbstring/mbstring.h:1.40.2.12.4.1 php-src/ext/mbstring/mbstring.h:1.40.2.12.4.2 --- php-src/ext/mbstring/mbstring.h:1.40.2.12.4.1 Sun Jan 1 13:46:54 2006 +++ php-src/ext/mbstring/mbstring.h