Skip to content

Commit acf76ae

Browse files
committed
fix loading of zend_extensions from command line arguments
1 parent 8fa376a commit acf76ae

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

phpdbg.c

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -699,8 +699,11 @@ int phpdbg_open_sockets(char *address, int port[2], int (*listen)[2], int (*sock
699699
int main(int argc, char **argv) /* {{{ */
700700
{
701701
sapi_module_struct *phpdbg = &phpdbg_sapi_module;
702+
char *sapi_name;
702703
char *ini_entries;
703704
int ini_entries_len;
705+
char **zend_extensions = NULL;
706+
zend_ulong zend_extensions_len = 0L;
704707
zend_bool ini_ignore;
705708
char *ini_override;
706709
char *exec;
@@ -717,7 +720,6 @@ int main(int argc, char **argv) /* {{{ */
717720
zend_bool remote = 0;
718721
int run = 0;
719722
int step = 0;
720-
char *sapi_name;
721723
char *bp_tmp_file;
722724
#ifndef _WIN32
723725
char *address;
@@ -768,6 +770,8 @@ int main(int argc, char **argv) /* {{{ */
768770
ini_entries_len = 0;
769771
ini_ignore = 0;
770772
ini_override = NULL;
773+
zend_extensions = NULL;
774+
zend_extensions_len = 0L;
771775
exec = NULL;
772776
exec_len = 0;
773777
init_file = NULL;
@@ -783,6 +787,7 @@ int main(int argc, char **argv) /* {{{ */
783787
step = 0;
784788
sapi_name = NULL;
785789

790+
786791
while ((opt = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) {
787792
switch (opt) {
788793
case 'r':
@@ -826,8 +831,13 @@ int main(int argc, char **argv) /* {{{ */
826831
ini_entries_len += len + sizeof("=1\n\0") - 2;
827832
}
828833
} break;
834+
829835
case 'z':
830-
zend_load_extension(php_optarg);
836+
zend_extensions_len++;
837+
if (zend_extensions) {
838+
zend_extensions = realloc(zend_extensions, sizeof(char*) * zend_extensions_len);
839+
} else zend_extensions = malloc(sizeof(char*) * zend_extensions_len);
840+
zend_extensions[zend_extensions_len-1] = strdup(php_optarg);
831841
break;
832842

833843
/* begin phpdbg options */
@@ -950,12 +960,35 @@ int main(int argc, char **argv) /* {{{ */
950960
memcpy(ini_entries, phpdbg_ini_hardcoded, sizeof(phpdbg_ini_hardcoded));
951961
}
952962
ini_entries_len += sizeof(phpdbg_ini_hardcoded) - 2;
963+
964+
if (zend_extensions_len) {
965+
zend_ulong zend_extension = 0L;
966+
967+
while (zend_extension < zend_extensions_len) {
968+
const char *ze = zend_extensions[zend_extension];
969+
size_t ze_len = strlen(ze);
970+
971+
ini_entries = realloc(
972+
ini_entries, ini_entries_len + (ze_len + (sizeof("zend_extension=\n"))));
973+
memcpy(&ini_entries[ini_entries_len], "zend_extension=", (sizeof("zend_extension=\n")-1));
974+
ini_entries_len += (sizeof("zend_extension=")-1);
975+
memcpy(&ini_entries[ini_entries_len], ze, ze_len);
976+
ini_entries_len += ze_len;
977+
memcpy(&ini_entries[ini_entries_len], "\n", (sizeof("\n") - 1));
978+
979+
free(zend_extensions[zend_extension]);
980+
zend_extension++;
981+
}
982+
983+
free(zend_extensions);
984+
}
953985

954986
phpdbg->ini_entries = ini_entries;
955-
987+
956988
if (phpdbg->startup(phpdbg) == SUCCESS) {
989+
957990
zend_activate(TSRMLS_C);
958-
991+
959992
/* do not install sigint handlers for remote consoles */
960993
/* sending SIGINT then provides a decent way of shutting down the server */
961994
#ifdef ZEND_SIGNALS

0 commit comments

Comments
 (0)