@@ -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
@@ -1936,9 +1937,9 @@ PHP_FUNCTION(mb_str_split)
1936
1937
string .val = (unsigned char * ) ZSTR_VAL (str );
1937
1938
string .len = ZSTR_LEN (str );
1938
1939
string .no_language = MBSTRG (language );
1939
- string .encoding = php_mb_get_encoding (encoding );
1940
+ string .encoding = php_mb_get_encoding (encoding , 3 );
1940
1941
if (!string .encoding ) {
1941
- RETURN_FALSE ;
1942
+ RETURN_THROWS () ;
1942
1943
}
1943
1944
1944
1945
p = ZSTR_VAL (str ); /* string cursor pointer */
@@ -2066,9 +2067,9 @@ PHP_FUNCTION(mb_strlen)
2066
2067
string .val = (unsigned char * ) str ;
2067
2068
string .len = str_len ;
2068
2069
string .no_language = MBSTRG (language );
2069
- string .encoding = php_mb_get_encoding (enc_name );
2070
+ string .encoding = php_mb_get_encoding (enc_name , 2 );
2070
2071
if (!string .encoding ) {
2071
- RETURN_FALSE ;
2072
+ RETURN_THROWS () ;
2072
2073
}
2073
2074
2074
2075
n = mbfl_strlen (& string );
@@ -2111,9 +2112,9 @@ PHP_FUNCTION(mb_strpos)
2111
2112
}
2112
2113
2113
2114
haystack .no_language = needle .no_language = MBSTRG (language );
2114
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2115
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2115
2116
if (!haystack .encoding ) {
2116
- RETURN_FALSE ;
2117
+ RETURN_THROWS () ;
2117
2118
}
2118
2119
2119
2120
n = mbfl_strpos (& haystack , & needle , offset , reverse );
@@ -2139,9 +2140,9 @@ PHP_FUNCTION(mb_strrpos)
2139
2140
}
2140
2141
2141
2142
haystack .no_language = needle .no_language = MBSTRG (language );
2142
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2143
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2143
2144
if (!haystack .encoding ) {
2144
- RETURN_FALSE ;
2145
+ RETURN_THROWS () ;
2145
2146
}
2146
2147
2147
2148
n = mbfl_strpos (& haystack , & needle , offset , 1 );
@@ -2167,7 +2168,7 @@ PHP_FUNCTION(mb_stripos)
2167
2168
RETURN_THROWS ();
2168
2169
}
2169
2170
2170
- n = php_mb_stripos (0 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , offset , from_encoding );
2171
+ n = php_mb_stripos (0 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , offset , from_encoding , 4 );
2171
2172
2172
2173
if (!mbfl_is_error (n )) {
2173
2174
RETVAL_LONG (n );
@@ -2191,7 +2192,7 @@ PHP_FUNCTION(mb_strripos)
2191
2192
RETURN_THROWS ();
2192
2193
}
2193
2194
2194
- n = php_mb_stripos (1 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , offset , from_encoding );
2195
+ n = php_mb_stripos (1 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , offset , from_encoding , 4 );
2195
2196
2196
2197
if (!mbfl_is_error (n )) {
2197
2198
RETVAL_LONG (n );
@@ -2216,9 +2217,9 @@ PHP_FUNCTION(mb_strstr)
2216
2217
}
2217
2218
2218
2219
haystack .no_language = needle .no_language = MBSTRG (language );
2219
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2220
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2220
2221
if (!haystack .encoding ) {
2221
- RETURN_FALSE ;
2222
+ RETURN_THROWS () ;
2222
2223
}
2223
2224
2224
2225
n = mbfl_strpos (& haystack , & needle , 0 , 0 );
@@ -2262,9 +2263,9 @@ PHP_FUNCTION(mb_strrchr)
2262
2263
}
2263
2264
2264
2265
haystack .no_language = needle .no_language = MBSTRG (language );
2265
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2266
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 4 );
2266
2267
if (!haystack .encoding ) {
2267
- RETURN_FALSE ;
2268
+ RETURN_THROWS () ;
2268
2269
}
2269
2270
2270
2271
n = mbfl_strpos (& haystack , & needle , 0 , 1 );
@@ -2308,12 +2309,12 @@ PHP_FUNCTION(mb_stristr)
2308
2309
}
2309
2310
2310
2311
haystack .no_language = needle .no_language = MBSTRG (language );
2311
- haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding );
2312
+ haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding , 4 );
2312
2313
if (!haystack .encoding ) {
2313
- RETURN_FALSE ;
2314
+ RETURN_THROWS () ;
2314
2315
}
2315
2316
2316
- n = php_mb_stripos (0 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , 0 , from_encoding );
2317
+ n = php_mb_stripos (0 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , 0 , from_encoding , 4 );
2317
2318
if (mbfl_is_error (n )) {
2318
2319
RETURN_FALSE ;
2319
2320
}
@@ -2354,12 +2355,12 @@ PHP_FUNCTION(mb_strrichr)
2354
2355
}
2355
2356
2356
2357
haystack .no_language = needle .no_language = MBSTRG (language );
2357
- haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding );
2358
+ haystack .encoding = needle .encoding = php_mb_get_encoding (from_encoding , 4 );
2358
2359
if (!haystack .encoding ) {
2359
- RETURN_FALSE ;
2360
+ RETURN_THROWS () ;
2360
2361
}
2361
2362
2362
- n = php_mb_stripos (1 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , 0 , from_encoding );
2363
+ n = php_mb_stripos (1 , (char * )haystack .val , haystack .len , (char * )needle .val , needle .len , 0 , from_encoding , 4 );
2363
2364
if (mbfl_is_error (n )) {
2364
2365
RETURN_FALSE ;
2365
2366
}
@@ -2399,9 +2400,9 @@ PHP_FUNCTION(mb_substr_count)
2399
2400
}
2400
2401
2401
2402
haystack .no_language = needle .no_language = MBSTRG (language );
2402
- haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name );
2403
+ haystack .encoding = needle .encoding = php_mb_get_encoding (enc_name , 3 );
2403
2404
if (!haystack .encoding ) {
2404
- RETURN_FALSE ;
2405
+ RETURN_THROWS () ;
2405
2406
}
2406
2407
2407
2408
if (needle .len == 0 ) {
@@ -2435,9 +2436,9 @@ PHP_FUNCTION(mb_substr)
2435
2436
}
2436
2437
2437
2438
string .no_language = MBSTRG (language );
2438
- string .encoding = php_mb_get_encoding (encoding );
2439
+ string .encoding = php_mb_get_encoding (encoding , 4 );
2439
2440
if (!string .encoding ) {
2440
- RETURN_FALSE ;
2441
+ RETURN_THROWS () ;
2441
2442
}
2442
2443
2443
2444
string .val = (unsigned char * )str ;
@@ -2498,9 +2499,9 @@ PHP_FUNCTION(mb_strcut)
2498
2499
}
2499
2500
2500
2501
string .no_language = MBSTRG (language );
2501
- string .encoding = php_mb_get_encoding (encoding );
2502
+ string .encoding = php_mb_get_encoding (encoding , 4 );
2502
2503
if (!string .encoding ) {
2503
- RETURN_FALSE ;
2504
+ RETURN_THROWS () ;
2504
2505
}
2505
2506
2506
2507
if (len_is_null ) {
@@ -2555,12 +2556,9 @@ PHP_FUNCTION(mb_strwidth)
2555
2556
}
2556
2557
2557
2558
string .no_language = MBSTRG (language );
2558
- // TODO CHECK THIS WHAT THE FUCK IT DOES
2559
- string .encoding = php_mb_get_encoding (enc_name );
2559
+ string .encoding = php_mb_get_encoding (enc_name , 2 );
2560
2560
if (!string .encoding ) {
2561
- //zend_argument_value_error(1, "must be a valid encoding, encoding \"%s\" is unknown", name);
2562
- //RETURN_THROWS();
2563
- RETURN_FALSE ;
2561
+ RETURN_THROWS ();
2564
2562
}
2565
2563
2566
2564
n = mbfl_strwidth (& string );
@@ -2587,9 +2585,9 @@ PHP_FUNCTION(mb_strimwidth)
2587
2585
}
2588
2586
2589
2587
string .no_language = marker .no_language = MBSTRG (language );
2590
- string .encoding = marker .encoding = php_mb_get_encoding (encoding );
2588
+ string .encoding = marker .encoding = php_mb_get_encoding (encoding , 5 );
2591
2589
if (!string .encoding ) {
2592
- RETURN_FALSE ;
2590
+ RETURN_THROWS () ;
2593
2591
}
2594
2592
2595
2593
string .val = (unsigned char * )str ;
@@ -2827,9 +2825,9 @@ PHP_FUNCTION(mb_convert_encoding)
2827
2825
RETURN_THROWS ();
2828
2826
}
2829
2827
2830
- to_encoding = php_mb_get_encoding (to_encoding_name );
2828
+ to_encoding = php_mb_get_encoding (to_encoding_name , 2 );
2831
2829
if (!to_encoding ) {
2832
- RETURN_FALSE ;
2830
+ RETURN_THROWS () ;
2833
2831
}
2834
2832
2835
2833
if (Z_TYPE_P (input ) != IS_STRING && Z_TYPE_P (input ) != IS_ARRAY ) {
@@ -2930,9 +2928,9 @@ PHP_FUNCTION(mb_convert_case)
2930
2928
RETURN_THROWS ();
2931
2929
}
2932
2930
2933
- enc = php_mb_get_encoding (from_encoding );
2931
+ enc = php_mb_get_encoding (from_encoding , 3 );
2934
2932
if (!enc ) {
2935
- return ;
2933
+ RETURN_THROWS () ;
2936
2934
}
2937
2935
2938
2936
if (case_mode < 0 || case_mode > PHP_UNICODE_CASE_MODE_MAX ) {
@@ -2967,9 +2965,9 @@ PHP_FUNCTION(mb_strtoupper)
2967
2965
RETURN_THROWS ();
2968
2966
}
2969
2967
2970
- enc = php_mb_get_encoding (from_encoding );
2968
+ enc = php_mb_get_encoding (from_encoding , 2 );
2971
2969
if (!enc ) {
2972
- RETURN_FALSE ;
2970
+ RETURN_THROWS () ;
2973
2971
}
2974
2972
2975
2973
newstr = mbstring_convert_case (PHP_UNICODE_CASE_UPPER , str , str_len , & ret_len , enc );
@@ -3001,9 +2999,9 @@ PHP_FUNCTION(mb_strtolower)
3001
2999
RETURN_THROWS ();
3002
3000
}
3003
3001
3004
- enc = php_mb_get_encoding (from_encoding );
3002
+ enc = php_mb_get_encoding (from_encoding , 2 );
3005
3003
if (!enc ) {
3006
- RETURN_FALSE ;
3004
+ RETURN_THROWS () ;
3007
3005
}
3008
3006
3009
3007
newstr = mbstring_convert_case (PHP_UNICODE_CASE_LOWER , str , str_len , & ret_len , enc );
@@ -3310,9 +3308,9 @@ PHP_FUNCTION(mb_convert_kana)
3310
3308
3311
3309
/* encoding */
3312
3310
string .no_language = MBSTRG (language );
3313
- string .encoding = php_mb_get_encoding (encname );
3311
+ string .encoding = php_mb_get_encoding (encname , 3 );
3314
3312
if (!string .encoding ) {
3315
- RETURN_FALSE ;
3313
+ RETURN_THROWS () ;
3316
3314
}
3317
3315
3318
3316
ret = mbfl_ja_jp_hantozen (& string , & result , opt );
@@ -4431,14 +4429,15 @@ PHP_FUNCTION(mb_check_encoding)
4431
4429
/* }}} */
4432
4430
4433
4431
4434
- static inline zend_long php_mb_ord (const char * str , size_t str_len , zend_string * enc_name )
4432
+ static inline zend_long php_mb_ord (const char * str , size_t str_len , zend_string * enc_name ,
4433
+ const uint32_t enc_name_arg_num )
4435
4434
{
4436
4435
const mbfl_encoding * enc ;
4437
4436
enum mbfl_no_encoding no_enc ;
4438
4437
4439
- enc = php_mb_get_encoding (enc_name );
4438
+ enc = php_mb_get_encoding (enc_name , enc_name_arg_num );
4440
4439
if (!enc ) {
4441
- return -1 ;
4440
+ return -2 ;
4442
4441
}
4443
4442
4444
4443
no_enc = enc -> no_encoding ;
@@ -4497,9 +4496,12 @@ PHP_FUNCTION(mb_ord)
4497
4496
Z_PARAM_STR (enc )
4498
4497
ZEND_PARSE_PARAMETERS_END ();
4499
4498
4500
- cp = php_mb_ord (str , str_len , enc );
4499
+ cp = php_mb_ord (str , str_len , enc , 2 );
4501
4500
4502
4501
if (0 > cp ) {
4502
+ if (cp == -2 ) {
4503
+ RETURN_THROWS ();
4504
+ }
4503
4505
RETURN_FALSE ;
4504
4506
}
4505
4507
@@ -4508,15 +4510,15 @@ PHP_FUNCTION(mb_ord)
4508
4510
/* }}} */
4509
4511
4510
4512
4511
- static inline zend_string * php_mb_chr (zend_long cp , zend_string * enc_name )
4513
+ static inline zend_string * php_mb_chr (zend_long cp , zend_string * enc_name , uint32_t enc_name_arg_num )
4512
4514
{
4513
4515
const mbfl_encoding * enc ;
4514
4516
enum mbfl_no_encoding no_enc ;
4515
4517
zend_string * ret ;
4516
4518
char * buf ;
4517
4519
size_t buf_len ;
4518
4520
4519
- enc = php_mb_get_encoding (enc_name );
4521
+ enc = php_mb_get_encoding (enc_name , enc_name_arg_num );
4520
4522
if (!enc ) {
4521
4523
return NULL ;
4522
4524
}
@@ -4605,7 +4607,7 @@ PHP_FUNCTION(mb_chr)
4605
4607
Z_PARAM_STR (enc )
4606
4608
ZEND_PARSE_PARAMETERS_END ();
4607
4609
4608
- ret = php_mb_chr (cp , enc );
4610
+ ret = php_mb_chr (cp , enc , 2 );
4609
4611
if (ret == NULL ) {
4610
4612
RETURN_FALSE ;
4611
4613
}
@@ -4637,9 +4639,9 @@ PHP_FUNCTION(mb_scrub)
4637
4639
Z_PARAM_STR (enc_name )
4638
4640
ZEND_PARSE_PARAMETERS_END ();
4639
4641
4640
- enc = php_mb_get_encoding (enc_name );
4642
+ enc = php_mb_get_encoding (enc_name , 2 );
4641
4643
if (!enc ) {
4642
- RETURN_FALSE ;
4644
+ RETURN_THROWS () ;
4643
4645
}
4644
4646
4645
4647
ret = php_mb_scrub (str , str_len , enc , & ret_len );
@@ -4764,13 +4766,15 @@ MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nby
4764
4766
4765
4767
/* {{{ MBSTRING_API int php_mb_stripos()
4766
4768
*/
4767
- MBSTRING_API size_t php_mb_stripos (int mode , const char * old_haystack , size_t old_haystack_len , const char * old_needle , size_t old_needle_len , zend_long offset , zend_string * from_encoding )
4769
+ MBSTRING_API size_t php_mb_stripos (int mode , const char * old_haystack , size_t old_haystack_len ,
4770
+ const char * old_needle , size_t old_needle_len , zend_long offset ,
4771
+ zend_string * from_encoding , const uint32_t from_encoding_arg_num )
4768
4772
{
4769
4773
size_t n = (size_t ) -1 ;
4770
4774
mbfl_string haystack , needle ;
4771
4775
const mbfl_encoding * enc ;
4772
4776
4773
- enc = php_mb_get_encoding (from_encoding );
4777
+ enc = php_mb_get_encoding (from_encoding , from_encoding_arg_num );
4774
4778
if (!enc ) {
4775
4779
return (size_t ) -1 ;
4776
4780
}
0 commit comments