]> granicus.if.org Git - php/commitdiff
Fix #77800 phpdbg segfaults on conditional breakpoints
authorJoe Watkins <krakjoe@php.net>
Tue, 26 Mar 2019 22:05:06 +0000 (23:05 +0100)
committerJoe Watkins <krakjoe@php.net>
Tue, 26 Mar 2019 22:05:06 +0000 (23:05 +0100)
NEWS
sapi/phpdbg/phpdbg_bp.c

diff --git a/NEWS b/NEWS
index 388158cb62e448660e2b6ef020a85875dcc690f8..1711079d218115b4617e0c836048cc865446c7f9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -12,7 +12,9 @@ PHP                                                                        NEWS
 
 - phpdbg:
   . Fixed bug #76801 (too many open files). (alekitto)
-
+  . Fixed bug #77800 (phpdbg segfaults on listing some conditional breakpoints).
+    (krakjoe)
+    
 - Reflection:
   . Fixed bug #77772 (ReflectionClass::getMethods(null) doesn't work). (Nikita)
 
index 27bf532dcccd9c6d7238b5991bea0c4568da6f65..56b814a9df2611ee0798a9942f533b2e7786f87c 100644 (file)
@@ -232,7 +232,7 @@ PHPDBG_API void phpdbg_export_breakpoints_to_string(char **str) /* {{{ */
                } ZEND_HASH_FOREACH_END();
        }
 
-       if (!(*str)[0]) {
+       if ((*str) && !(*str)[0]) {
                *str = NULL;
        }
 } /* }}} */
@@ -813,6 +813,21 @@ static inline void phpdbg_create_conditional_break(phpdbg_breakcond_t *brake, co
        uint32_t cops = CG(compiler_options);
        zval pv;
 
+       switch (param->type) {
+           case STR_PARAM:
+               case NUMERIC_FUNCTION_PARAM:
+               case METHOD_PARAM:
+               case NUMERIC_METHOD_PARAM:
+               case FILE_PARAM:
+               case ADDR_PARAM:
+                   /* do nothing */
+               break;
+               
+               default:
+                       phpdbg_error("eval", "type=\"invalidparameter\"", "Invalid parameter type for conditional breakpoint");
+                       return;
+       }
+
        PHPDBG_BREAK_INIT(new_break, PHPDBG_BREAK_COND);
        new_break.hash = hash;