summaryrefslogtreecommitdiff
path: root/sapi/phpdbg/phpdbg_bp.c
diff options
context:
space:
mode:
authorJoe Watkins <krakjoe@php.net>2019-03-27 00:02:43 +0100
committerJoe Watkins <krakjoe@php.net>2019-03-27 00:02:43 +0100
commitf177a2ac586124374e13b93da0c0b9e0e4980ff6 (patch)
tree95870733aff32f187629a8856f00c1394769cadc /sapi/phpdbg/phpdbg_bp.c
parent903c1e379ba91663313ee76d2e7075283d2a3a7c (diff)
parent1e4cff9ddb810a9038a8613719d7f91ad8bda64f (diff)
downloadphp-git-f177a2ac586124374e13b93da0c0b9e0e4980ff6.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: more work on phpdbg conditional breaks
Diffstat (limited to 'sapi/phpdbg/phpdbg_bp.c')
-rw-r--r--sapi/phpdbg/phpdbg_bp.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/sapi/phpdbg/phpdbg_bp.c b/sapi/phpdbg/phpdbg_bp.c
index a7253250d6..3a47c78470 100644
--- a/sapi/phpdbg/phpdbg_bp.c
+++ b/sapi/phpdbg/phpdbg_bp.c
@@ -53,6 +53,7 @@ static inline void _phpdbg_break_mapping(int id, HashTable *table) /* {{{ */
zend_hash_index_del(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], (id))
#define PHPDBG_BREAK_INIT(b, t) do {\
+ memset(&b, 0, sizeof(b)); \
b.id = PHPDBG_G(bp_count)++; \
b.type = t; \
b.disabled = 0;\
@@ -192,6 +193,24 @@ PHPDBG_API void phpdbg_export_breakpoints_to_string(char **str) /* {{{ */
if (conditional->paramed) {
switch (conditional->param.type) {
+ case NUMERIC_FUNCTION_PARAM:
+ phpdbg_asprintf(&new_str,
+ "%sbreak at %s#%ld if %s\n",
+ *str, conditional->param.str, conditional->param.num, conditional->code);
+ break;
+
+ case NUMERIC_METHOD_PARAM:
+ phpdbg_asprintf(&new_str,
+ "%sbreak at %s::%s#%ld if %s\n",
+ *str, conditional->param.method.class, conditional->param.method.name, conditional->param.num, conditional->code);
+ break;
+
+ case ADDR_PARAM:
+ phpdbg_asprintf(&new_str,
+ "%sbreak at 0X%lx if %s\n",
+ *str, conditional->param.addr, conditional->code);
+ break;
+
case STR_PARAM:
phpdbg_asprintf(&new_str,
"%sbreak at %s if %s\n", *str, conditional->param.str, conditional->code);
@@ -835,6 +854,20 @@ static inline void phpdbg_create_conditional_break(phpdbg_breakcond_t *brake, co
new_break.paramed = 1;
phpdbg_copy_param(
param, &new_break.param);
+ if (new_break.param.type == FILE_PARAM ||
+ new_break.param.type == NUMERIC_FILE_PARAM) {
+ char realpath[MAXPATHLEN];
+
+ if (VCWD_REALPATH(new_break.param.file.name, realpath)) {
+ efree(new_break.param.file.name);
+
+ new_break.param.file.name = estrdup(realpath);
+ } else {
+ phpdbg_error("eval", "type=\"invalidparameter\"", "Invalid file for conditional break %s", new_break.param.file.name);
+ phpdbg_clear_param(&new_break.param);
+ return;
+ }
+ }
} else {
new_break.paramed = 0;
}