@@ -323,7 +323,7 @@ static const sapi_post_entry mbstr_post_entries[] = {
323
323
};
324
324
/* }}} */
325
325
326
- static const mbfl_encoding * php_mb_get_encoding (zend_string * encoding_name ) {
326
+ static const mbfl_encoding * php_mb_get_encoding (zend_string * encoding_name , const uint32_t arg_num ) {
327
327
if (encoding_name ) {
328
328
const mbfl_encoding * encoding ;
329
329
zend_string * last_encoding_name = MBSTRG (last_used_encoding_name );
@@ -334,7 +334,8 @@ static const mbfl_encoding *php_mb_get_encoding(zend_string *encoding_name) {
334
334
335
335
encoding = mbfl_name2encoding (ZSTR_VAL (encoding_name ));
336
336
if (!encoding ) {
337
- php_error_docref (NULL , E_WARNING , "Unknown encoding \"%s\"" , ZSTR_VAL (encoding_name ));
337
+ zend_argument_value_error (arg_num , "must be a valid encoding, encoding \"%s\" is unknown" ,
338
+ ZSTR_VAL (encoding_name ));
338
339
return NULL ;
339
340
}
340
341
@@ -1891,9 +1892,9 @@ PHP_FUNCTION(mb_str_split)
1891
1892
string .val = (unsigned char * ) ZSTR_VAL (str );
1892
1893
string .len = ZSTR_LEN (str );
1893
1894
string .no_language = MBSTRG (language );
1894
- string .encoding = php_mb_get_encoding (encoding );
1895
+ string .encoding = php_mb_get_encoding (encoding , 3 );
1895
1896
if (!string .encoding ) {
1896
- RETURN_FALSE ;
1897
+ RETURN_THROWS () ;
1897
1898
}
1898
1899
1899
1900
p = ZSTR_VAL (str ); /* string cursor pointer */
@@ -2021,9 +2022,9 @@ PHP_FUNCTION(mb_strlen)
2021
2022
string .val = (unsigned char * ) str ;
2022
2023
string .len = str_len ;
2023
2024
string .no_language = MBSTRG (language );
2024
- string .encoding = php_mb_get_encoding (enc_name );
2025
+ string .encoding = php_mb_get_encoding (enc_name , 2 );
2025
2026
if (!string .encoding ) {
2026
- RETURN_FALSE ;
2027
+ RETURN_THROWS () ;
2027
2028
}
2028
2029
2029
2030
n = mbfl_strlen (& string );
@@ -2066,9 +2067,9 @@ PHP_FUNCTION(mb_strpos)
2066
2067
}
2067
2068
2068
2069
haystack .no_language = needle .no_language = MBSTRG (language );
2069
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2070
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2070
2071
if (!haystack .encoding ) {
2071
- RETURN_FALSE ;
2072
+ RETURN_THROWS () ;
2072
2073
}
2073
2074
2074
2075
n = mbfl_strpos (& haystack , & needle , offset , reverse );
@@ -2094,9 +2095,9 @@ PHP_FUNCTION(mb_strrpos)
2094
2095
}
2095
2096
2096
2097
haystack .no_language = needle .no_language = MBSTRG (language );
2097
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2098
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2098
2099
if (!haystack .encoding ) {
2099
- RETURN_FALSE ;
2100
+ RETURN_THROWS () ;
2100
2101
}
2101
2102
2102
2103
n = mbfl_strpos (& haystack , & needle , offset , 1 );
@@ -2125,7 +2126,7 @@ PHP_FUNCTION(mb_stripos)
2125
2126
2126
2127
enc = php_mb_get_encoding (from_encoding );
2127
2128
if (!enc ) {
2128
- RETURN_FALSE ;
2129
+ RETURN_THROWS () ;
2129
2130
}
2130
2131
2131
2132
n = php_mb_stripos (0 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , offset , enc );
@@ -2155,7 +2156,7 @@ PHP_FUNCTION(mb_strripos)
2155
2156
2156
2157
enc = php_mb_get_encoding (from_encoding );
2157
2158
if (!enc ) {
2158
- RETURN_FALSE ;
2159
+ RETURN_THROWS () ;
2159
2160
}
2160
2161
2161
2162
n = php_mb_stripos (1 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , offset , enc );
@@ -2183,9 +2184,9 @@ PHP_FUNCTION(mb_strstr)
2183
2184
}
2184
2185
2185
2186
haystack .no_language = needle .no_language = MBSTRG (language );
2186
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2187
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2187
2188
if (!haystack .encoding ) {
2188
- RETURN_FALSE ;
2189
+ RETURN_THROWS () ;
2189
2190
}
2190
2191
2191
2192
n = mbfl_strpos (& haystack , & needle , 0 , 0 );
@@ -2229,9 +2230,9 @@ PHP_FUNCTION(mb_strrchr)
2229
2230
}
2230
2231
2231
2232
haystack .no_language = needle .no_language = MBSTRG (language );
2232
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2233
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2233
2234
if (!haystack .encoding ) {
2234
- RETURN_FALSE ;
2235
+ RETURN_THROWS () ;
2235
2236
}
2236
2237
2237
2238
n = mbfl_strpos (& haystack , & needle , 0 , 1 );
@@ -2275,9 +2276,9 @@ PHP_FUNCTION(mb_stristr)
2275
2276
}
2276
2277
2277
2278
haystack .no_language = needle .no_language = MBSTRG (language );
2278
- haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding );
2279
+ haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding , 4 );
2279
2280
if (!haystack .encoding ) {
2280
- RETURN_FALSE ;
2281
+ RETURN_THROWS () ;
2281
2282
}
2282
2283
2283
2284
n = php_mb_stripos (0 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , 0 , needle .encoding );
@@ -2321,9 +2322,9 @@ PHP_FUNCTION(mb_strrichr)
2321
2322
}
2322
2323
2323
2324
haystack .no_language = needle .no_language = MBSTRG (language );
2324
- haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding );
2325
+ haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding , 4 );
2325
2326
if (!haystack .encoding ) {
2326
- RETURN_FALSE ;
2327
+ RETURN_THROWS () ;
2327
2328
}
2328
2329
2329
2330
n = php_mb_stripos (1 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , 0 , needle .encoding );
@@ -2366,9 +2367,9 @@ PHP_FUNCTION(mb_substr_count)
2366
2367
}
2367
2368
2368
2369
haystack .no_language = needle .no_language = MBSTRG (language );
2369
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2370
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 3 );
2370
2371
if (!haystack .encoding ) {
2371
- RETURN_FALSE ;
2372
+ RETURN_THROWS () ;
2372
2373
}
2373
2374
2374
2375
if (needle .len == 0 ) {
@@ -2402,9 +2403,9 @@ PHP_FUNCTION(mb_substr)
2402
2403
}
2403
2404
2404
2405
string .no_language = MBSTRG (language );
2405
- string .encoding = php_mb_get_encoding (encoding );
2406
+ string .encoding = php_mb_get_encoding (encoding , 4 );
2406
2407
if (!string .encoding ) {
2407
- RETURN_FALSE ;
2408
+ RETURN_THROWS () ;
2408
2409
}
2409
2410
2410
2411
string .val = (unsigned char * )str ;
@@ -2465,9 +2466,9 @@ PHP_FUNCTION(mb_strcut)
2465
2466
}
2466
2467
2467
2468
string .no_language = MBSTRG (language );
2468
- string .encoding = php_mb_get_encoding (encoding );
2469
+ string .encoding = php_mb_get_encoding (encoding , 4 );
2469
2470
if (!string .encoding ) {
2470
- RETURN_FALSE ;
2471
+ RETURN_THROWS () ;
2471
2472
}
2472
2473
2473
2474
if (len_is_null ) {
@@ -2522,12 +2523,9 @@ PHP_FUNCTION(mb_strwidth)
2522
2523
}
2523
2524
2524
2525
string .no_language = MBSTRG (language );
2525
- // TODO CHECK THIS WHAT THE FUCK IT DOES
2526
- string .encoding = php_mb_get_encoding (enc_name );
2526
+ string .encoding = php_mb_get_encoding (enc_name , 2 );
2527
2527
if (!string .encoding ) {
2528
- //zend_argument_value_error(1, "must be a valid encoding, encoding \"%s\" is unknown", name);
2529
- //RETURN_THROWS();
2530
- RETURN_FALSE ;
2528
+ RETURN_THROWS ();
2531
2529
}
2532
2530
2533
2531
n = mbfl_strwidth (& string );
@@ -2554,9 +2552,9 @@ PHP_FUNCTION(mb_strimwidth)
2554
2552
}
2555
2553
2556
2554
string .no_language = marker .no_language = MBSTRG (language );
2557
- string .encoding = marker .encoding = php_mb_get_encoding (encoding );
2555
+ string .encoding = marker .encoding = php_mb_get_encoding (encoding , 5 );
2558
2556
if (!string .encoding ) {
2559
- RETURN_FALSE ;
2557
+ RETURN_THROWS () ;
2560
2558
}
2561
2559
2562
2560
string .val = (unsigned char * )str ;
@@ -2788,9 +2786,9 @@ PHP_FUNCTION(mb_convert_encoding)
2788
2786
RETURN_THROWS ();
2789
2787
}
2790
2788
2791
- to_encoding = php_mb_get_encoding (to_encoding_name );
2789
+ to_encoding = php_mb_get_encoding (to_encoding_name , 2 );
2792
2790
if (!to_encoding ) {
2793
- RETURN_FALSE ;
2791
+ RETURN_THROWS () ;
2794
2792
}
2795
2793
2796
2794
if (Z_TYPE_P (input ) != IS_STRING && Z_TYPE_P (input ) != IS_ARRAY ) {
@@ -2881,9 +2879,9 @@ PHP_FUNCTION(mb_convert_case)
2881
2879
RETURN_THROWS ();
2882
2880
}
2883
2881
2884
- enc = php_mb_get_encoding (from_encoding );
2882
+ enc = php_mb_get_encoding (from_encoding , 3 );
2885
2883
if (!enc ) {
2886
- return ;
2884
+ RETURN_THROWS () ;
2887
2885
}
2888
2886
2889
2887
if (case_mode < 0 || case_mode > PHP_UNICODE_CASE_MODE_MAX ) {
@@ -2918,9 +2916,9 @@ PHP_FUNCTION(mb_strtoupper)
2918
2916
RETURN_THROWS ();
2919
2917
}
2920
2918
2921
- enc = php_mb_get_encoding (from_encoding );
2919
+ enc = php_mb_get_encoding (from_encoding , 2 );
2922
2920
if (!enc ) {
2923
- RETURN_FALSE ;
2921
+ RETURN_THROWS () ;
2924
2922
}
2925
2923
2926
2924
newstr = mbstring_convert_case (PHP_UNICODE_CASE_UPPER , str , str_len , & ret_len , enc );
@@ -2952,9 +2950,9 @@ PHP_FUNCTION(mb_strtolower)
2952
2950
RETURN_THROWS ();
2953
2951
}
2954
2952
2955
- enc = php_mb_get_encoding (from_encoding );
2953
+ enc = php_mb_get_encoding (from_encoding , 2 );
2956
2954
if (!enc ) {
2957
- RETURN_FALSE ;
2955
+ RETURN_THROWS () ;
2958
2956
}
2959
2957
2960
2958
newstr = mbstring_convert_case (PHP_UNICODE_CASE_LOWER , str , str_len , & ret_len , enc );
@@ -3253,9 +3251,9 @@ PHP_FUNCTION(mb_convert_kana)
3253
3251
3254
3252
/* encoding */
3255
3253
string .no_language = MBSTRG (language );
3256
- string .encoding = php_mb_get_encoding (encname );
3254
+ string .encoding = php_mb_get_encoding (encname , 3 );
3257
3255
if (!string .encoding ) {
3258
- RETURN_FALSE ;
3256
+ RETURN_THROWS () ;
3259
3257
}
3260
3258
3261
3259
ret = mbfl_ja_jp_hantozen (& string , & result , opt );
@@ -4380,14 +4378,15 @@ PHP_FUNCTION(mb_check_encoding)
4380
4378
/* }}} */
4381
4379
4382
4380
4383
- static inline zend_long php_mb_ord (const char * str , size_t str_len , zend_string * enc_name )
4381
+ static inline zend_long php_mb_ord (const char * str , size_t str_len , zend_string * enc_name ,
4382
+ const uint32_t enc_name_arg_num )
4384
4383
{
4385
4384
const mbfl_encoding * enc ;
4386
4385
enum mbfl_no_encoding no_enc ;
4387
4386
4388
- enc = php_mb_get_encoding (enc_name );
4387
+ enc = php_mb_get_encoding (enc_name , enc_name_arg_num );
4389
4388
if (!enc ) {
4390
- return -1 ;
4389
+ return -2 ;
4391
4390
}
4392
4391
4393
4392
no_enc = enc -> no_encoding ;
@@ -4446,9 +4445,12 @@ PHP_FUNCTION(mb_ord)
4446
4445
Z_PARAM_STR (enc )
4447
4446
ZEND_PARSE_PARAMETERS_END ();
4448
4447
4449
- cp = php_mb_ord (str , str_len , enc );
4448
+ cp = php_mb_ord (str , str_len , enc , 2 );
4450
4449
4451
4450
if (0 > cp ) {
4451
+ if (cp == -2 ) {
4452
+ RETURN_THROWS ();
4453
+ }
4452
4454
RETURN_FALSE ;
4453
4455
}
4454
4456
@@ -4457,15 +4459,15 @@ PHP_FUNCTION(mb_ord)
4457
4459
/* }}} */
4458
4460
4459
4461
4460
- static inline zend_string * php_mb_chr (zend_long cp , zend_string * enc_name )
4462
+ static inline zend_string * php_mb_chr (zend_long cp , zend_string * enc_name , uint32_t enc_name_arg_num )
4461
4463
{
4462
4464
const mbfl_encoding * enc ;
4463
4465
enum mbfl_no_encoding no_enc ;
4464
4466
zend_string * ret ;
4465
4467
char * buf ;
4466
4468
size_t buf_len ;
4467
4469
4468
- enc = php_mb_get_encoding (enc_name );
4470
+ enc = php_mb_get_encoding (enc_name , enc_name_arg_num );
4469
4471
if (!enc ) {
4470
4472
return NULL ;
4471
4473
}
@@ -4554,7 +4556,7 @@ PHP_FUNCTION(mb_chr)
4554
4556
Z_PARAM_STR (enc )
4555
4557
ZEND_PARSE_PARAMETERS_END ();
4556
4558
4557
- ret = php_mb_chr (cp , enc );
4559
+ ret = php_mb_chr (cp , enc , 2 );
4558
4560
if (ret == NULL ) {
4559
4561
RETURN_FALSE ;
4560
4562
}
@@ -4586,9 +4588,9 @@ PHP_FUNCTION(mb_scrub)
4586
4588
Z_PARAM_STR (enc_name )
4587
4589
ZEND_PARSE_PARAMETERS_END ();
4588
4590
4589
- enc = php_mb_get_encoding (enc_name );
4591
+ enc = php_mb_get_encoding (enc_name , 2 );
4590
4592
if (!enc ) {
4591
- RETURN_FALSE ;
4593
+ RETURN_THROWS () ;
4592
4594
}
4593
4595
4594
4596
ret = php_mb_scrub (str , str_len , enc , & ret_len );
0 commit comments