From acf76ae619ef741246b38b95e099ea0c23ce17e5 Mon Sep 17 00:00:00 2001 From: krakjoe <joe.watkins@live.co.uk> Date: Tue, 3 Dec 2013 12:26:19 +0000 Subject: [PATCH] fix loading of zend_extensions from command line arguments --- phpdbg.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/phpdbg.c b/phpdbg.c index bbe992c930..32cc0769f9 100644 --- a/phpdbg.c +++ b/phpdbg.c @@ -699,8 +699,11 @@ int phpdbg_open_sockets(char *address, int port[2], int (*listen)[2], int (*sock int main(int argc, char **argv) /* {{{ */ { sapi_module_struct *phpdbg = &phpdbg_sapi_module; + char *sapi_name; char *ini_entries; int ini_entries_len; + char **zend_extensions = NULL; + zend_ulong zend_extensions_len = 0L; zend_bool ini_ignore; char *ini_override; char *exec; @@ -717,7 +720,6 @@ int main(int argc, char **argv) /* {{{ */ zend_bool remote = 0; int run = 0; int step = 0; - char *sapi_name; char *bp_tmp_file; #ifndef _WIN32 char *address; @@ -768,6 +770,8 @@ phpdbg_main: ini_entries_len = 0; ini_ignore = 0; ini_override = NULL; + zend_extensions = NULL; + zend_extensions_len = 0L; exec = NULL; exec_len = 0; init_file = NULL; @@ -783,6 +787,7 @@ phpdbg_main: step = 0; sapi_name = NULL; + while ((opt = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) { switch (opt) { case 'r': @@ -826,8 +831,13 @@ phpdbg_main: ini_entries_len += len + sizeof("=1\n\0") - 2; } } break; + case 'z': - zend_load_extension(php_optarg); + zend_extensions_len++; + if (zend_extensions) { + zend_extensions = realloc(zend_extensions, sizeof(char*) * zend_extensions_len); + } else zend_extensions = malloc(sizeof(char*) * zend_extensions_len); + zend_extensions[zend_extensions_len-1] = strdup(php_optarg); break; /* begin phpdbg options */ @@ -950,12 +960,35 @@ phpdbg_main: memcpy(ini_entries, phpdbg_ini_hardcoded, sizeof(phpdbg_ini_hardcoded)); } ini_entries_len += sizeof(phpdbg_ini_hardcoded) - 2; + + if (zend_extensions_len) { + zend_ulong zend_extension = 0L; + + while (zend_extension < zend_extensions_len) { + const char *ze = zend_extensions[zend_extension]; + size_t ze_len = strlen(ze); + + ini_entries = realloc( + ini_entries, ini_entries_len + (ze_len + (sizeof("zend_extension=\n")))); + memcpy(&ini_entries[ini_entries_len], "zend_extension=", (sizeof("zend_extension=\n")-1)); + ini_entries_len += (sizeof("zend_extension=")-1); + memcpy(&ini_entries[ini_entries_len], ze, ze_len); + ini_entries_len += ze_len; + memcpy(&ini_entries[ini_entries_len], "\n", (sizeof("\n") - 1)); + + free(zend_extensions[zend_extension]); + zend_extension++; + } + + free(zend_extensions); + } phpdbg->ini_entries = ini_entries; - + if (phpdbg->startup(phpdbg) == SUCCESS) { + zend_activate(TSRMLS_C); - + /* do not install sigint handlers for remote consoles */ /* sending SIGINT then provides a decent way of shutting down the server */ #ifdef ZEND_SIGNALS -- 2.40.0