@@ -585,8 +585,6 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
585
585
586
586
char * s = NULL ;
587
587
size_t s_len ;
588
- int free_zcopy ;
589
- zval * zvp , zcopy ;
590
588
591
589
int min_width = 0 ;
592
590
int precision = 0 ;
@@ -630,11 +628,11 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
630
628
/*
631
629
* Default variable settings
632
630
*/
631
+ zend_string * tmp_str = NULL ;
633
632
adjust = RIGHT ;
634
633
alternate_form = print_sign = print_blank = NO ;
635
634
pad_char = ' ' ;
636
635
prefix_char = NUL ;
637
- free_zcopy = 0 ;
638
636
639
637
fmt ++ ;
640
638
@@ -768,13 +766,10 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
768
766
*/
769
767
switch (* fmt ) {
770
768
case 'Z' : {
771
- zvp = (zval * ) va_arg (ap , zval * );
772
- free_zcopy = zend_make_printable_zval (zvp , & zcopy );
773
- if (free_zcopy ) {
774
- zvp = & zcopy ;
775
- }
776
- s_len = Z_STRLEN_P (zvp );
777
- s = Z_STRVAL_P (zvp );
769
+ zval * zvp = va_arg (ap , zval * );
770
+ zend_string * str = zval_get_tmp_string (zvp , & tmp_str );
771
+ s_len = ZSTR_LEN (str );
772
+ s = ZSTR_VAL (str );
778
773
if (adjust_precision && (size_t )precision < s_len ) {
779
774
s_len = precision ;
780
775
}
@@ -1178,9 +1173,7 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
1178
1173
1179
1174
if (adjust_width && adjust == LEFT && (size_t )min_width > s_len )
1180
1175
PAD (min_width , s_len , pad_char );
1181
- if (free_zcopy ) {
1182
- zval_ptr_dtor_str (& zcopy );
1183
- }
1176
+ zend_tmp_string_release (tmp_str );
1184
1177
}
1185
1178
skip_output :
1186
1179
fmt ++ ;
0 commit comments