Commit:    24585722b1a9acd87387285a301a6c5e084d21bc
Author:    Bob Weinand <bobw...@hotmail.com>         Thu, 28 Nov 2013 22:03:59 
+0100
Parents:   d7f6e884932423662aaf319bced391c91c76cb48
Branches:  PHP-5.6

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=24585722b1a9acd87387285a301a6c5e084d21bc

Log:
Small bug fix on error

Changed paths:
  M  phpdbg_bp.c
  M  phpdbg_bp.h


Diff:
diff --git a/phpdbg_bp.c b/phpdbg_bp.c
index 22d376e..11f2754 100644
--- a/phpdbg_bp.c
+++ b/phpdbg_bp.c
@@ -319,10 +319,11 @@ PHPDBG_API void phpdbg_set_breakpoint_opline(zend_ulong 
opline TSRMLS_DC) /* {{{
                        }
                } while (--i);
 
-               if (!branch ||
+               if (i ||
                    (zend_ulong)(branch->op_array + branch->op_array->last) <= 
opline ||
                    (opline - (zend_ulong)branch->op_array) % sizeof(zend_op) > 
0) {
                        phpdbg_error("No opline could be found at 0x%lx", 
opline);
+                       return;
                }
 
                opline_break.opline = (opline - (zend_ulong)branch->op_array) / 
sizeof(zend_op);
@@ -379,7 +380,7 @@ PHPDBG_API void phpdbg_set_breakpoint_opline(zend_ulong 
opline TSRMLS_DC) /* {{{
        }
 } /* }}} */
 
-PHPDBG_API void phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, 
zend_op_array *op_array TSRMLS_DC) {
+PHPDBG_API int phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, 
zend_op_array *op_array TSRMLS_DC) {
        phpdbg_breakline_t opline_break;
        if (op_array->last < brake->opline) {
                if (brake->class_name == NULL) {
@@ -387,6 +388,8 @@ PHPDBG_API void 
phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, zend_
                } else {
                        phpdbg_error("There are only %d oplines in method 
%s::%s (breaking at opline %d impossible)", op_array->last, brake->class_name, 
brake->func_name, brake->opline);
                }
+
+               return FAILURE;
        }
 
        opline_break.id = brake->id;
@@ -396,6 +399,8 @@ PHPDBG_API void 
phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, zend_
        PHPDBG_G(flags) |= PHPDBG_HAS_OPLINE_BP;
 
        zend_hash_index_update(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], 
opline_break.opline, &opline_break, sizeof(phpdbg_breakline_t), NULL);
+
+       return SUCCESS;
 }
 
 PHPDBG_API void phpdbg_resolve_op_array_breaks(zend_op_array *op_array 
TSRMLS_DC) {
@@ -416,9 +421,7 @@ PHPDBG_API void 
phpdbg_resolve_op_array_breaks(zend_op_array *op_array TSRMLS_DC
        for (zend_hash_internal_pointer_reset_ex(oplines_table, &position);
             zend_hash_get_current_data_ex(oplines_table, (void**) &brake, 
&position) == SUCCESS;
             zend_hash_move_forward_ex(oplines_table, &position)) {
-               zend_try {
-                       phpdbg_resolve_op_array_break(brake, op_array 
TSRMLS_CC);
-               } zend_end_try();
+               phpdbg_resolve_op_array_break(brake, op_array TSRMLS_CC);
        }
 }
 
@@ -447,9 +450,12 @@ PHPDBG_API int 
phpdbg_resolve_opline_break(phpdbg_breakopline_t *new_break TSRML
                } else {
                        phpdbg_error("%s::%s is not an user defined method, no 
oplines exist", new_break->class_name, new_break->func_name);
                }
+               return 2;
        }
 
-       phpdbg_resolve_op_array_break(new_break, &func->op_array TSRMLS_CC);
+       if (phpdbg_resolve_op_array_break(new_break, &func->op_array TSRMLS_CC) 
== FAILURE) {
+               return 2;
+       }
 
        return SUCCESS;
 }
@@ -467,10 +473,17 @@ PHPDBG_API void phpdbg_set_breakpoint_method_opline(const 
char *class, const cha
        new_break.opline = opline;
        new_break.id = PHPDBG_G(bp_count)++;
 
-       if (phpdbg_resolve_opline_break(&new_break TSRMLS_CC) == FAILURE) {
-               phpdbg_notice("Pending breakpoint #%d at %s::%s:%d", 
new_break.id, new_break.class_name, new_break.func_name, opline);
-       } else {
-               phpdbg_notice("Breakpoint #%d added at %s::%s:%d", 
new_break.id, new_break.class_name, new_break.func_name, opline);
+       switch (phpdbg_resolve_opline_break(&new_break TSRMLS_CC)) {
+               case FAILURE:
+                       phpdbg_notice("Pending breakpoint #%d at %s::%s:%d", 
new_break.id, new_break.class_name, new_break.func_name, opline);
+                       break;
+
+               case SUCCESS:
+                       phpdbg_notice("Breakpoint #%d added at %s::%s:%d", 
new_break.id, new_break.class_name, new_break.func_name, opline);
+                       break;
+
+               case 2:
+                       return;
        }
 
        if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE], 
new_break.class_name, new_break.class_len, (void **)&class_table) == FAILURE) {
@@ -512,10 +525,17 @@ PHPDBG_API void 
phpdbg_set_breakpoint_function_opline(const char *function, int
        new_break.opline = opline;
        new_break.id = PHPDBG_G(bp_count)++;
 
-       if (phpdbg_resolve_opline_break(&new_break TSRMLS_CC) == FAILURE) {
-               phpdbg_notice("Pending breakpoint #%d at %s:%d", new_break.id, 
new_break.func_name, new_break.opline);
-       } else {
-               phpdbg_notice("Breakpoint #%d added at %s:%d", new_break.id, 
new_break.func_name, new_break.opline);
+       switch (phpdbg_resolve_opline_break(&new_break TSRMLS_CC)) {
+               case FAILURE:
+                       phpdbg_notice("Pending breakpoint #%d at %s:%d", 
new_break.id, new_break.func_name, new_break.opline);
+                       break;
+
+               case SUCCESS:
+                       phpdbg_notice("Breakpoint #%d added at %s:%d", 
new_break.id, new_break.func_name, new_break.opline);
+                       break;
+
+               case 2:
+                       return;
        }
 
        if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE], 
new_break.func_name, new_break.func_len, (void **)&func_table) == FAILURE) {
diff --git a/phpdbg_bp.h b/phpdbg_bp.h
index 0d72ea9..4e151d0 100644
--- a/phpdbg_bp.h
+++ b/phpdbg_bp.h
@@ -94,7 +94,7 @@ typedef struct _phpdbg_breakcond_t {
 PHPDBG_API void phpdbg_save_oplines(zend_op_array *op_array TSRMLS_DC);
 
 PHPDBG_API void phpdbg_resolve_op_array_breaks(zend_op_array *op_array 
TSRMLS_DC);
-PHPDBG_API void phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, 
zend_op_array *op_array TSRMLS_DC);
+PHPDBG_API int phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, 
zend_op_array *op_array TSRMLS_DC);
 PHPDBG_API int phpdbg_resolve_opline_break(phpdbg_breakopline_t *new_break 
TSRMLS_DC);
 
 PHPDBG_API void phpdbg_set_breakpoint_file(const char*, long TSRMLS_DC);


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to