From: Nikita Popov Date: Fri, 28 Jun 2019 10:32:54 +0000 (+0200) Subject: Avoid reliance on arena details on phpdbg oplog X-Git-Tag: php-7.4.0alpha3~137 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=50cce5eb4f7c2627622875d9360b66b6c3234afe;p=php Avoid reliance on arena details on phpdbg oplog Instead of guessing what the address of the first arena allocation is going to be, embed the sentinel in the oplog_list structure directly. --- diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index 463749ea3a..67cefc75f2 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -449,14 +449,12 @@ static PHP_FUNCTION(phpdbg_start_oplog) if (!prev) { PHPDBG_G(oplog_arena) = zend_arena_create(64 * 1024); - - PHPDBG_G(oplog_cur) = ((phpdbg_oplog_entry *) zend_arena_alloc(&PHPDBG_G(oplog_arena), sizeof(phpdbg_oplog_entry))) + 1; - PHPDBG_G(oplog_cur)->next = NULL; } PHPDBG_G(oplog_list) = emalloc(sizeof(phpdbg_oplog_list)); PHPDBG_G(oplog_list)->prev = prev; - PHPDBG_G(oplog_list)->start = PHPDBG_G(oplog_cur); + PHPDBG_G(oplog_cur) = &PHPDBG_G(oplog_list)->start; + PHPDBG_G(oplog_cur)->next = NULL; } static zend_always_inline zend_bool phpdbg_is_ignored_opcode(zend_uchar opcode) { @@ -633,7 +631,7 @@ static PHP_FUNCTION(phpdbg_end_oplog) return; } - cur = PHPDBG_G(oplog_list)->start; + cur = PHPDBG_G(oplog_list)->start.next; prev = PHPDBG_G(oplog_list)->prev; efree(PHPDBG_G(oplog_list)); diff --git a/sapi/phpdbg/phpdbg_opcode.h b/sapi/phpdbg/phpdbg_opcode.h index f84862fbae..b9e2fa506c 100644 --- a/sapi/phpdbg/phpdbg_opcode.h +++ b/sapi/phpdbg/phpdbg_opcode.h @@ -40,7 +40,7 @@ struct _phpdbg_oplog_entry { typedef struct _phpdbg_oplog_list phpdbg_oplog_list; struct _phpdbg_oplog_list { phpdbg_oplog_list *prev; - phpdbg_oplog_entry *start; + phpdbg_oplog_entry start; /* Only "next" member used. */ }; #endif /* PHPDBG_OPCODE_H */