@@ -935,20 +935,28 @@ static void _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAMETERS, OnigOp
935
935
936
936
if (eval ) {
937
937
zval v ;
938
+ zend_string * eval_str ;
938
939
/* null terminate buffer */
939
940
smart_str_0 (& eval_buf );
941
+
942
+ if (eval_buf .s ) {
943
+ eval_str = eval_buf .s ;
944
+ } else {
945
+ eval_str = ZSTR_EMPTY_ALLOC ();
946
+ }
947
+
940
948
/* do eval */
941
- if (zend_eval_stringl (ZSTR_VAL (eval_buf . s ), ZSTR_LEN (eval_buf . s ), & v , description ) == FAILURE ) {
949
+ if (zend_eval_stringl (ZSTR_VAL (eval_str ), ZSTR_LEN (eval_str ), & v , description ) == FAILURE ) {
942
950
efree (description );
943
- php_error_docref (NULL ,E_ERROR , "Failed evaluating code: %s%s" , PHP_EOL , ZSTR_VAL (eval_buf . s ));
951
+ php_error_docref (NULL ,E_ERROR , "Failed evaluating code: %s%s" , PHP_EOL , ZSTR_VAL (eval_str ));
944
952
/* zend_error() does not return in this case */
945
953
}
946
954
947
955
/* result of eval */
948
956
convert_to_string (& v );
949
957
smart_str_appendl (& out_buf , Z_STRVAL (v ), Z_STRLEN (v ));
950
958
/* Clean up */
951
- ZSTR_LEN ( eval_buf . s ) = 0 ;
959
+ smart_str_free ( & eval_buf ) ;
952
960
zval_dtor (& v );
953
961
} else if (is_callable ) {
954
962
zval args [1 ];
@@ -971,9 +979,7 @@ static void _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAMETERS, OnigOp
971
979
!Z_ISUNDEF (retval )) {
972
980
convert_to_string_ex (& retval );
973
981
smart_str_appendl (& out_buf , Z_STRVAL (retval ), Z_STRLEN (retval ));
974
- if (eval_buf .s ) {
975
- ZSTR_LEN (eval_buf .s ) = 0 ;
976
- }
982
+ smart_str_free (& eval_buf );
977
983
zval_ptr_dtor (& retval );
978
984
} else {
979
985
efree (description );
0 commit comments