summaryrefslogtreecommitdiff
path: root/sapi/phpdbg
diff options
context:
space:
mode:
Diffstat (limited to 'sapi/phpdbg')
-rw-r--r--sapi/phpdbg/phpdbg.c13
-rw-r--r--sapi/phpdbg/tests/commands/0107_compile.test17
2 files changed, 29 insertions, 1 deletions
diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c
index 3337f05cdc..74bf84adff 100644
--- a/sapi/phpdbg/phpdbg.c
+++ b/sapi/phpdbg/phpdbg.c
@@ -65,6 +65,7 @@ PHP_INI_BEGIN()
PHP_INI_END()
static zend_bool phpdbg_booted = 0;
+static zend_bool phpdbg_fully_started = 0;
#if PHP_VERSION_ID >= 50500
void (*zend_execute_old)(zend_execute_data *execute_data);
@@ -523,6 +524,10 @@ static void php_sapi_phpdbg_log_message(char *message) /* {{{ */
phpdbg_list_file(file, 3, zend_get_executed_lineno() - 1, zend_get_executed_lineno());
efree(file);
+ if (!phpdbg_fully_started) {
+ return;
+ }
+
do {
switch (phpdbg_interactive(1)) {
case PHPDBG_LEAVE:
@@ -1476,7 +1481,11 @@ phpdbg_main:
if (settings) {
PHPDBG_G(flags) |= PHPDBG_DISCARD_OUTPUT;
}
- phpdbg_compile();
+
+ zend_try {
+ phpdbg_compile();
+ } zend_end_try();
+
PHPDBG_G(flags) &= ~PHPDBG_DISCARD_OUTPUT;
}
@@ -1485,6 +1494,8 @@ phpdbg_main:
PHPDBG_G(flags) |= PHPDBG_IS_STEPPING;
}
+ phpdbg_fully_started = 1;
+
/* #ifndef for making compiler shutting up */
#ifndef _WIN32
phpdbg_interact:
diff --git a/sapi/phpdbg/tests/commands/0107_compile.test b/sapi/phpdbg/tests/commands/0107_compile.test
new file mode 100644
index 0000000000..4842cb74f1
--- /dev/null
+++ b/sapi/phpdbg/tests/commands/0107_compile.test
@@ -0,0 +1,17 @@
+#################################################
+# name: compile
+# purpose: test compiling error code
+# expect: TEST::FORMAT
+# options: -rr
+#################################################
+#[PHP Parse error: syntax error, unexpected 'echo' (T_ECHO) in %s on line %s]
+#[Could not find information about included file...]
+#################################################
+<:
+define('OUT',
+ tempnam(null, "phpdbg"));
+file_put_contents(OUT, "<?error echo \"Hello World\"; ?>");
+phpdbg_exec(OUT);
+:>
+run
+quit