Skip to content

Commit e5379d2

Browse files
committed
Fix GH-13681: segfault when adding watchpoint fails.
thus when removing its entry, no watch point is set and crash on pointer access.
1 parent d8795a3 commit e5379d2

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

sapi/phpdbg/phpdbg_watch.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ void phpdbg_watch_parent_ht(phpdbg_watch_element *element) {
665665
}
666666

667667
void phpdbg_unwatch_parent_ht(phpdbg_watch_element *element) {
668-
if (element->watch->type == WATCH_ON_BUCKET) {
668+
if (element->watch && element->watch->type == WATCH_ON_BUCKET) {
669669
phpdbg_btree_result *res = phpdbg_btree_find(&PHPDBG_G(watch_HashTables), (zend_ulong) element->parent_container);
670670
ZEND_ASSERT(element->parent_container);
671671
if (res) {
@@ -966,11 +966,14 @@ void phpdbg_remove_watchpoint(phpdbg_watchpoint_t *watch) {
966966
}
967967

968968
void phpdbg_clean_watch_element(phpdbg_watch_element *element) {
969-
HashTable *elements = &element->watch->elements;
970969
phpdbg_unwatch_parent_ht(element);
971-
zend_hash_del(elements, element->str);
972-
if (zend_hash_num_elements(elements) == 0) {
973-
phpdbg_remove_watchpoint(element->watch);
970+
971+
if (element->watch) {
972+
HashTable *elements = &element->watch->elements;
973+
zend_hash_del(elements, element->str);
974+
if (zend_hash_num_elements(elements) == 0) {
975+
phpdbg_remove_watchpoint(element->watch);
976+
}
974977
}
975978
}
976979

0 commit comments

Comments
 (0)