From: Felipe Pena Date: Wed, 13 Nov 2013 21:11:45 +0000 (-0200) Subject: - Fixed crash when supplied invalid syntax to "break file" X-Git-Tag: php-5.6.0alpha1~110^2~357 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=388b132d31115da9a2edb9dbb2e136e7df0fff50;p=php - Fixed crash when supplied invalid syntax to "break file" --- diff --git a/phpdbg_break.c b/phpdbg_break.c index 23b1c592e9..920350f7a7 100644 --- a/phpdbg_break.c +++ b/phpdbg_break.c @@ -28,39 +28,45 @@ ZEND_EXTERN_MODULE_GLOBALS(phpdbg); PHPDBG_BREAK(file) /* {{{ */ { - if (expr && expr_len > 0L) { - if (!phpdbg_is_class_method(expr, expr_len, NULL, NULL)) { - char path[MAXPATHLEN], resolved_name[MAXPATHLEN]; - const char *line_pos = strchr(expr, ':'); - long line_num = strtol(line_pos+1, NULL, 0); - - if (line_num) { - memcpy(path, expr, line_pos - expr); - path[line_pos - expr] = 0; - - if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) { - phpdbg_error("Failed to expand path %s", path); - return SUCCESS; - } - - phpdbg_set_breakpoint_file(resolved_name, line_num TSRMLS_CC); - } else { - phpdbg_error("No line specified in expression %s", expr); - return SUCCESS; - } - } - } else { - phpdbg_error( - "No expression provided"); - } - return SUCCESS; + const char *line_pos; + + if (!expr || expr_len == 0) { + phpdbg_error("No expression provided"); + return SUCCESS; + } + + line_pos = strchr(expr, ':'); + + if (!line_pos) { + phpdbg_error("No line specified in expression %s", expr); + return SUCCESS; + } + + if (phpdbg_is_class_method(expr, expr_len, NULL, NULL)) { + phpdbg_error("Expected file:line format"); + return SUCCESS; + } else { + char path[MAXPATHLEN], resolved_name[MAXPATHLEN]; + long line_num = strtol(line_pos+1, NULL, 0); + + memcpy(path, expr, line_pos - expr); + path[line_pos - expr] = 0; + + if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) { + phpdbg_error("Failed to expand path %s", path); + return SUCCESS; + } + + phpdbg_set_breakpoint_file(resolved_name, line_num TSRMLS_CC); + } + return SUCCESS; } /* }}} */ PHPDBG_BREAK(method) /* {{{ */ { char *class_name; char *func_name; - + if (expr && expr_len >0L) { if (phpdbg_is_class_method(expr, expr_len+1, &class_name, &func_name)) { phpdbg_set_breakpoint_method( @@ -72,7 +78,7 @@ PHPDBG_BREAK(method) /* {{{ */ } else { phpdbg_error("No expression provided"); } - + return SUCCESS; } /* }}} */ @@ -100,7 +106,7 @@ PHPDBG_BREAK(on) /* {{{ */ phpdbg_error( "No expression provided!"); } - + return SUCCESS; } /* }}} */ @@ -110,7 +116,7 @@ PHPDBG_BREAK(lineno) /* {{{ */ if (expr && expr_len > 0L) { if (phpdbg_is_numeric(expr)) { const char *filename = zend_get_executed_filename(TSRMLS_C); - + if (filename) { phpdbg_set_breakpoint_file( filename, strtol(expr, NULL, 0) TSRMLS_CC); @@ -125,7 +131,7 @@ PHPDBG_BREAK(lineno) /* {{{ */ phpdbg_error( "No expression provided!"); } - + return SUCCESS; } /* }}} */ @@ -134,7 +140,7 @@ PHPDBG_BREAK(func) /* {{{ */ if (expr && expr_len > 0L) { char name[200]; size_t name_len = expr_len; - + name_len = MIN(name_len, 200); memcpy(name, expr, name_len); name[name_len] = 0;