@@ -923,55 +923,63 @@ static inline int phpdbg_call_register(phpdbg_input_t *input TSRMLS_DC) /* {{{ *
923
923
924
924
if (zend_hash_exists (
925
925
& PHPDBG_G (registered ), function -> string , function -> length + 1 )) {
926
+
926
927
zval fname , * fretval ;
927
928
zend_fcall_info fci ;
928
- zval * * params = NULL ;
929
+
930
+ ZVAL_STRINGL (& fname , function -> string , function -> length , 1 );
929
931
932
+ fci .size = sizeof (fci );
933
+ fci .function_table = & PHPDBG_G (registered );
934
+ fci .function_name = & fname ;
935
+ fci .symbol_table = EG (active_symbol_table );
936
+ fci .object_ptr = NULL ;
937
+ fci .retval_ptr_ptr = & fretval ;
938
+ fci .no_separation = 1 ;
939
+
930
940
if (input -> argc > 1 ) {
931
941
int arg ;
942
+ zval * * * params ;
943
+ zval * zparam ;
944
+
945
+ fci .param_count = (input -> argc > 1 ) ? (input -> argc - 1 ) : 0 ;
946
+ fci .params = (zval * * * ) emalloc (fci .param_count * sizeof (zval * * ));
932
947
933
- params = emalloc ( sizeof ( zval * ) * input -> argc ) ;
948
+ params = fci . params ;
934
949
935
950
for (arg = 1 ; arg <= (input -> argc - 1 ); arg ++ ) {
936
- MAKE_STD_ZVAL (( params [ arg - 1 ]) );
951
+ MAKE_STD_ZVAL (zparam );
937
952
ZVAL_STRINGL (
938
- ( params [ arg - 1 ]),
953
+ zparam ,
939
954
input -> argv [arg ]-> string ,
940
955
input -> argv [arg ]-> length , 1 );
956
+
957
+ * params ++ = & zparam ;
941
958
}
959
+ } else {
960
+ fci .params = NULL ;
961
+ fci .param_count = 0 ;
942
962
}
943
963
944
- ZVAL_STRINGL (& fname , function -> string , function -> length , 1 );
945
-
946
- fci .size = sizeof (fci );
947
- fci .function_table = & PHPDBG_G (registered );
948
- fci .function_name = & fname ;
949
- fci .symbol_table = EG (active_symbol_table );
950
- fci .object_ptr = NULL ;
951
- fci .retval_ptr_ptr = & fretval ;
952
-
953
- fci .param_count = (input -> argc > 1 ) ? (input -> argc - 1 ) : 0 ;
954
- fci .params = (input -> argc > 1 ) ? & params : NULL ;
955
- fci .no_separation = 1 ;
956
-
957
- zend_call_function (
958
- & fci , NULL TSRMLS_CC );
964
+ zend_call_function (& fci , NULL TSRMLS_CC );
959
965
960
- zval_dtor (& fname );
961
-
962
966
if (input -> argc > 1 ) {
963
- int arg ;
967
+ int param ;
964
968
965
- for (arg = 1 ; arg <= ( input -> argc - 1 ); arg ++ ) {
966
- zval_ptr_dtor (& params [arg - 1 ]);
969
+ for (param = 0 ; param < fci . param_count ; param ++ ) {
970
+ zval_ptr_dtor (fci . params [param ]);
967
971
}
968
- efree (params );
972
+ efree (fci . params );
969
973
}
974
+
970
975
if (fretval ) {
971
976
zend_print_zval_r (
972
977
fretval , 0 TSRMLS_CC );
973
978
phpdbg_writeln (EMPTY );
974
979
}
980
+
981
+ zval_dtor (& fname );
982
+
975
983
return SUCCESS ;
976
984
}
977
985
0 commit comments