mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Fix crashes in function registration + test
Internal function won't need their refcount increased as they outlive the debugger session, and userland functions won't be unloaded either. So no refcount management is necessary for registered functions.
This commit is contained in:
parent
e4df0cbe1c
commit
8cb15f6203
3 changed files with 31 additions and 7 deletions
|
@ -90,11 +90,6 @@ static void php_phpdbg_destroy_bp_condition(zval *data) /* {{{ */
|
|||
efree(brake);
|
||||
} /* }}} */
|
||||
|
||||
static void php_phpdbg_destroy_registered(zval *data) /* {{{ */
|
||||
{
|
||||
zend_function_dtor(data);
|
||||
} /* }}} */
|
||||
|
||||
static void php_phpdbg_destroy_file_source(zval *data) /* {{{ */
|
||||
{
|
||||
phpdbg_file_source *source = (phpdbg_file_source *) Z_PTR_P(data);
|
||||
|
@ -164,7 +159,7 @@ static PHP_MINIT_FUNCTION(phpdbg) /* {{{ */
|
|||
zend_hash_init(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], 8, NULL, NULL, 0);
|
||||
|
||||
zend_hash_init(&PHPDBG_G(seek), 8, NULL, NULL, 0);
|
||||
zend_hash_init(&PHPDBG_G(registered), 8, NULL, php_phpdbg_destroy_registered, 0);
|
||||
zend_hash_init(&PHPDBG_G(registered), 8, NULL, NULL, true);
|
||||
|
||||
zend_hash_init(&PHPDBG_G(file_sources), 0, NULL, php_phpdbg_destroy_file_source, 0);
|
||||
phpdbg_setup_watchpoints();
|
||||
|
|
|
@ -1420,7 +1420,6 @@ PHPDBG_COMMAND(register) /* {{{ */
|
|||
if (!zend_hash_str_exists(&PHPDBG_G(registered), lcname, lcname_len)) {
|
||||
if ((function = zend_hash_str_find_ptr(EG(function_table), lcname, lcname_len))) {
|
||||
zend_hash_str_update_ptr(&PHPDBG_G(registered), lcname, lcname_len, function);
|
||||
function_add_ref(function);
|
||||
|
||||
phpdbg_notice("Registered %s", lcname);
|
||||
} else {
|
||||
|
|
30
sapi/phpdbg/tests/register_function.phpt
Normal file
30
sapi/phpdbg/tests/register_function.phpt
Normal file
|
@ -0,0 +1,30 @@
|
|||
--TEST--
|
||||
Test registering of functions
|
||||
--PHPDBG--
|
||||
R testfunc
|
||||
testfunc 1 2 3
|
||||
R var_dump
|
||||
var_dump foo
|
||||
q
|
||||
--FILE--
|
||||
<?php
|
||||
function testfunc() {
|
||||
var_dump(func_get_args());
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
[Successful compilation of %s]
|
||||
prompt> [Registered testfunc]
|
||||
prompt> array(3) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
[2]=>
|
||||
int(3)
|
||||
}
|
||||
|
||||
prompt> [Registered var_dump]
|
||||
prompt> string(3) "foo"
|
||||
|
||||
prompt>
|
Loading…
Add table
Add a link
Reference in a new issue