@@ -3045,16 +3045,14 @@ PHP_FUNCTION(mb_list_encodings)
3045
3045
PHP_FUNCTION (mb_encoding_aliases )
3046
3046
{
3047
3047
const mbfl_encoding * encoding ;
3048
- char * name = NULL ;
3049
- size_t name_len ;
3048
+ zend_string * encoding_name = NULL ;
3050
3049
3051
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "s " , & name , & name_len ) == FAILURE ) {
3050
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "S " , & encoding_name ) == FAILURE ) {
3052
3051
RETURN_THROWS ();
3053
3052
}
3054
3053
3055
- encoding = mbfl_name2encoding ( name );
3054
+ encoding = php_mb_get_encoding ( encoding_name , 1 );
3056
3055
if (!encoding ) {
3057
- zend_argument_value_error (1 , "must be a valid encoding, \"%s\" given" , name );
3058
3056
RETURN_THROWS ();
3059
3057
}
3060
3058
@@ -3074,8 +3072,7 @@ PHP_FUNCTION(mb_encode_mimeheader)
3074
3072
{
3075
3073
const mbfl_encoding * charset , * transenc ;
3076
3074
mbfl_string string , result , * ret ;
3077
- char * charset_name = NULL ;
3078
- size_t charset_name_len ;
3075
+ zend_string * charset_name = NULL ;
3079
3076
char * trans_enc_name = NULL ;
3080
3077
size_t trans_enc_name_len ;
3081
3078
char * linefeed = "\r\n" ;
@@ -3085,17 +3082,16 @@ PHP_FUNCTION(mb_encode_mimeheader)
3085
3082
string .no_language = MBSTRG (language );
3086
3083
string .encoding = MBSTRG (current_internal_encoding );
3087
3084
3088
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "s|sssl " , (char * * )& string .val , & string .len , & charset_name , & charset_name_len , & trans_enc_name , & trans_enc_name_len , & linefeed , & linefeed_len , & indent ) == FAILURE ) {
3085
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "s|Sssl " , (char * * )& string .val , & string .len , & charset_name , & trans_enc_name , & trans_enc_name_len , & linefeed , & linefeed_len , & indent ) == FAILURE ) {
3089
3086
RETURN_THROWS ();
3090
3087
}
3091
3088
3092
3089
charset = & mbfl_encoding_pass ;
3093
3090
transenc = & mbfl_encoding_base64 ;
3094
3091
3095
3092
if (charset_name != NULL ) {
3096
- charset = mbfl_name2encoding (charset_name );
3093
+ charset = php_mb_get_encoding (charset_name , 2 );
3097
3094
if (!charset ) {
3098
- zend_argument_value_error (2 , "must be a valid encoding, \"%s\" given" , charset_name );
3099
3095
RETURN_THROWS ();
3100
3096
}
3101
3097
} else {
@@ -3347,29 +3343,27 @@ static int mb_recursive_convert_variable(mbfl_buffer_converter *convd, zval *var
3347
3343
PHP_FUNCTION (mb_convert_variables )
3348
3344
{
3349
3345
zval * args ;
3346
+ zend_string * to_enc_str ;
3350
3347
zend_string * from_enc_str ;
3351
3348
HashTable * from_enc_ht ;
3352
3349
mbfl_string string , result ;
3353
3350
const mbfl_encoding * from_encoding , * to_encoding ;
3354
3351
mbfl_encoding_detector * identd ;
3355
3352
mbfl_buffer_converter * convd ;
3356
3353
int n , argc ;
3357
- size_t to_enc_len ;
3358
3354
size_t elistsz ;
3359
3355
const mbfl_encoding * * elist ;
3360
- char * to_enc ;
3361
3356
int recursion_error = 0 ;
3362
3357
3363
3358
ZEND_PARSE_PARAMETERS_START (3 , -1 )
3364
- Z_PARAM_STRING ( to_enc , to_enc_len )
3359
+ Z_PARAM_STR ( to_enc_str )
3365
3360
Z_PARAM_STR_OR_ARRAY_HT (from_enc_str , from_enc_ht )
3366
3361
Z_PARAM_VARIADIC ('+' , args , argc )
3367
3362
ZEND_PARSE_PARAMETERS_END ();
3368
3363
3369
3364
/* new encoding */
3370
- to_encoding = mbfl_name2encoding ( to_enc );
3365
+ to_encoding = php_mb_get_encoding ( to_enc_str , 1 );
3371
3366
if (!to_encoding ) {
3372
- zend_argument_value_error (1 , "must be a valid encoding, \"%s\" given" , to_enc );
3373
3367
RETURN_THROWS ();
3374
3368
}
3375
3369
@@ -3476,36 +3470,31 @@ PHP_FUNCTION(mb_convert_variables)
3476
3470
static void
3477
3471
php_mb_numericentity_exec (INTERNAL_FUNCTION_PARAMETERS , int type )
3478
3472
{
3479
- char * str , * encoding = NULL ;
3480
- size_t str_len , encoding_len ;
3473
+ char * str = NULL ;
3474
+ size_t str_len ;
3475
+ zend_string * encoding = NULL ;
3481
3476
zval * hash_entry ;
3482
3477
HashTable * target_hash ;
3483
3478
int i , * convmap , * mapelm , mapsize = 0 ;
3484
3479
zend_bool is_hex = 0 ;
3485
3480
mbfl_string string , result , * ret ;
3486
3481
3487
3482
if (type == 0 ) {
3488
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "sh|sb " , & str , & str_len , & target_hash , & encoding , & encoding_len , & is_hex ) == FAILURE ) {
3483
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "sh|Sb " , & str , & str_len , & target_hash , & encoding , & is_hex ) == FAILURE ) {
3489
3484
RETURN_THROWS ();
3490
3485
}
3491
3486
} else {
3492
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "sh|s " , & str , & str_len , & target_hash , & encoding , & encoding_len ) == FAILURE ) {
3487
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "sh|S " , & str , & str_len , & target_hash , & encoding ) == FAILURE ) {
3493
3488
RETURN_THROWS ();
3494
3489
}
3495
3490
}
3496
3491
3497
3492
string .no_language = MBSTRG (language );
3498
- string .encoding = MBSTRG (current_internal_encoding );
3499
3493
string .val = (unsigned char * )str ;
3500
3494
string .len = str_len ;
3501
-
3502
- /* encoding */
3503
- if (encoding && encoding_len > 0 ) {
3504
- string .encoding = mbfl_name2encoding (encoding );
3505
- if (!string .encoding ) {
3506
- zend_argument_value_error (3 , "must be a valid encoding, \"%s\" given" , encoding );
3507
- RETURN_THROWS ();
3508
- }
3495
+ string .encoding = php_mb_get_encoding (encoding , 3 );
3496
+ if (!string .encoding ) {
3497
+ RETURN_THROWS ();
3509
3498
}
3510
3499
3511
3500
if (type == 0 && is_hex ) {
@@ -4216,7 +4205,6 @@ static inline int php_mb_check_encoding_impl(mbfl_buffer_converter *convd, const
4216
4205
return 0 ;
4217
4206
}
4218
4207
4219
-
4220
4208
MBSTRING_API int php_mb_check_encoding (
4221
4209
const char * input , size_t length , const mbfl_encoding * encoding )
4222
4210
{
@@ -4236,7 +4224,6 @@ MBSTRING_API int php_mb_check_encoding(
4236
4224
return 0 ;
4237
4225
}
4238
4226
4239
-
4240
4227
static int php_mb_check_encoding_recursive (HashTable * vars , const mbfl_encoding * encoding )
4241
4228
{
4242
4229
mbfl_buffer_converter * convd ;
@@ -4304,20 +4291,21 @@ PHP_FUNCTION(mb_check_encoding)
4304
4291
{
4305
4292
zend_string * input_str = NULL , * enc = NULL ;
4306
4293
HashTable * input_ht = NULL ;
4307
- const mbfl_encoding * encoding = MBSTRG ( current_internal_encoding ) ;
4294
+ const mbfl_encoding * encoding ;
4308
4295
4309
4296
ZEND_PARSE_PARAMETERS_START (0 , 2 )
4310
4297
Z_PARAM_OPTIONAL
4311
4298
Z_PARAM_STR_OR_ARRAY_HT (input_str , input_ht )
4312
4299
Z_PARAM_STR (enc )
4313
4300
ZEND_PARSE_PARAMETERS_END ();
4314
4301
4315
- if (enc != NULL) {
4316
- encoding = mbfl_name2encoding (ZSTR_VAL (enc ));
4317
- if (!encoding || encoding == & mbfl_encoding_pass ) {
4318
- php_error_docref (NULL , E_WARNING , "Invalid encoding \"%s\"" , ZSTR_VAL (enc ));
4319
- RETURN_FALSE ;
4320
- }
4302
+ encoding = php_mb_get_encoding (enc , 2 );
4303
+ if (!encoding ) {
4304
+ RETURN_THROWS ();
4305
+ }
4306
+ if (encoding == & mbfl_encoding_pass ) {
4307
+ zend_argument_value_error (2 , "cannot check \"pass\" encoding" );
4308
+ RETURN_THROWS ();
4321
4309
}
4322
4310
4323
4311
if (input_ht ) {
0 commit comments