Bug #79250 [Opn]: EG(current_module) NULL during property declaration
| From: | nikic@php.net | Date: | Mon, 10 Feb 2020 11:33:14 +0000 |
| Subject: | Bug #79250 [Opn]: EG(current_module) NULL during property declaration | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-225475@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79250&edit=1
ID: 79250
Updated by: nikic@php.net
Reported by: KseniMailWOW at gmail dot com
-Summary: PHP7.4+
+Summary: EG(current_module) NULL during property declaration
Status: Open
Type: Bug
Package: Class/Object related
Operating System: All (Windows7+)
PHP Version: 7.4.3RC1
Block user comment: N
Private report: N
New Comment:
Your link does not show a use of zend_declare_property_*. Can you please show at which point you
execute this call?
Previous Comments:
------------------------------------------------------------------------
[2020-02-10 11:23:52] KseniMailWOW at gmail dot com
The following patch has been added/updated:
Patch Name: ErrorCorrectingFunction
Revision: 1581333832
URL: https://bugs.php.net/patch-display.php?bug=79250&patch=ErrorCorrectingFunction&revision=1581333832
------------------------------------------------------------------------
[2020-02-10 11:21:16] KseniMailWOW at gmail dot com
Description:
------------
Semple PHP initialization https://pastebin.com/64XuRa4k
Calling zend_declare_property_* results in an empty memory access error (AV MEMORY READ).
The culprit became empty EG(current_module) In the new procedure is_persistent_class
(https://github.com/php/php-src/blob/cb7b21009b951d6a08fa948c775c141f6666204c/Zend/zend_API.c#L3474)
Test script:
---------------
zend_class_entry tmp;
INIT_CLASS_ENTRY(tmp, "Hgyjy", NULL);
return zend_register_internal_class(&tmp);
Replacing with, works great!!!!!!!!!!!!!!!!!!!!!!!!
static zend_always_inline zend_bool is_persistent_class(zend_class_entry *ce) {
return (ce->type & ZEND_INTERNAL_CLASS)
&& (!ce->info.internal.module || ce->info.internal.module->type ==
MODULE_PERSISTENT);
}
OR :
static zend_always_inline zend_bool is_persistent_class(zend_class_entry *ce) {
return (ce->type & ZEND_INTERNAL_CLASS) && (ce->info.internal.module &&
(ce->info.internal.module->type == MODULE_PERSISTENT));
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79250&edit=1