From 593e7b28e89a4c7ff34e2c0a3c05db43929f1db0 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sat, 16 Nov 2013 21:23:14 +0000 Subject: [PATCH] stat execution context and check it is a regular file or symlink --- phpdbg_prompt.c | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index 91cc881d60..e5276979e8 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -193,33 +193,43 @@ static PHPDBG_COMMAND(exec) /* {{{ */ return SUCCESS; } else { if (param->type == STR_PARAM) { - if (PHPDBG_G(exec)) { - phpdbg_notice("Unsetting old execution context: %s", PHPDBG_G(exec)); - efree(PHPDBG_G(exec)); - PHPDBG_G(exec) = NULL; - } + struct stat sb; + + if (VCWD_STAT(param->str, &sb) != FAILURE) { + if (sb.st_mode & S_IFREG|S_IFLNK) { + if (PHPDBG_G(exec)) { + phpdbg_notice("Unsetting old execution context: %s", PHPDBG_G(exec)); + efree(PHPDBG_G(exec)); + PHPDBG_G(exec) = NULL; + } - if (PHPDBG_G(ops)) { - phpdbg_notice("Destroying compiled opcodes"); - phpdbg_clean(0 TSRMLS_CC); - } + if (PHPDBG_G(ops)) { + phpdbg_notice("Destroying compiled opcodes"); + phpdbg_clean(0 TSRMLS_CC); + } - PHPDBG_G(exec) = phpdbg_resolve_path(param->str TSRMLS_CC); + PHPDBG_G(exec) = phpdbg_resolve_path(param->str TSRMLS_CC); - if (!PHPDBG_G(exec)) { - phpdbg_error("Cannot get real file path"); - return FAILURE; - } + if (!PHPDBG_G(exec)) { + phpdbg_error("Cannot get real file path"); + return FAILURE; + } - PHPDBG_G(exec_len) = strlen(PHPDBG_G(exec)); + PHPDBG_G(exec_len) = strlen(PHPDBG_G(exec)); - phpdbg_notice("Set execution context: %s", PHPDBG_G(exec)); + phpdbg_notice("Set execution context: %s", PHPDBG_G(exec)); + + } else { + phpdbg_error("Cannot use %s as execution context, not a valid file or symlink", param->str); + } + } else { + phpdbg_error("Cannot stat %s, ensure the file exists", param->str); + } } else { phpdbg_error("Unsupported parameter type (%s) for command", phpdbg_get_param_type(param TSRMLS_CC)); } } - return SUCCESS; } /* }}} */ -- 2.40.0