@@ -2715,9 +2715,10 @@ PHP_FUNCTION(mb_substr)
2715
2715
char * str , * encoding ;
2716
2716
long from , len ;
2717
2717
int mblen , str_len , encoding_len ;
2718
+ zval * * z_len = NULL ;
2718
2719
mbfl_string string , result , * ret ;
2719
2720
2720
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sl|ls " , & str , & str_len , & from , & len , & encoding , & encoding_len ) == FAILURE ) {
2721
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sl|Zs " , & str , & str_len , & from , & z_len , & encoding , & encoding_len ) == FAILURE ) {
2721
2722
return ;
2722
2723
}
2723
2724
@@ -2736,8 +2737,11 @@ PHP_FUNCTION(mb_substr)
2736
2737
string .val = (unsigned char * )str ;
2737
2738
string .len = str_len ;
2738
2739
2739
- if (argc < 3 ) {
2740
+ if (argc < 3 || Z_TYPE_PP ( z_len ) == IS_NULL ) {
2740
2741
len = str_len ;
2742
+ } else {
2743
+ convert_to_long_ex (z_len );
2744
+ len = Z_LVAL_PP (z_len );
2741
2745
}
2742
2746
2743
2747
/* measures length */
@@ -2788,13 +2792,14 @@ PHP_FUNCTION(mb_strcut)
2788
2792
char * encoding ;
2789
2793
long from , len ;
2790
2794
int encoding_len ;
2795
+ zval * * z_len = NULL ;
2791
2796
mbfl_string string , result , * ret ;
2792
2797
2793
2798
mbfl_string_init (& string );
2794
2799
string .no_language = MBSTRG (language );
2795
2800
string .no_encoding = MBSTRG (current_internal_encoding )-> no_encoding ;
2796
2801
2797
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sl|ls " , (char * * )& string .val , (int * * )& string .len , & from , & len , & encoding , & encoding_len ) == FAILURE ) {
2802
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sl|Zs " , (char * * )& string .val , (int * * )& string .len , & from , & z_len , & encoding , & encoding_len ) == FAILURE ) {
2798
2803
return ;
2799
2804
}
2800
2805
@@ -2806,8 +2811,11 @@ PHP_FUNCTION(mb_strcut)
2806
2811
}
2807
2812
}
2808
2813
2809
- if (argc < 3 ) {
2814
+ if (argc < 3 || Z_TYPE_PP ( z_len ) == IS_NULL ) {
2810
2815
len = string .len ;
2816
+ } else {
2817
+ convert_to_long_ex (z_len );
2818
+ len = Z_LVAL_PP (z_len );
2811
2819
}
2812
2820
2813
2821
/* if "from" position is negative, count start position from the end
0 commit comments