Bug #79250 [Opn->Fbk]: EG(current_module) NULL during property declaration
| From: | cmb@php.net | Date: | Thu, 11 Feb 2021 11:57:03 +0000 |
| Subject: | Bug #79250 [Opn->Fbk]: EG(current_module) NULL during property declaration | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-232055@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: cmb@php.net
Reported by: KseniMailWOW at gmail dot com
Summary: EG(current_module) NULL during property declaration
-Status: Open
+Status: Feedback
Type: Bug
Package: Class/Object related
Operating System: All (Windows7+)
PHP Version: 7.4.3RC1
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
The pastbin samples are no longer available. Has this issue be
resolved in the meantime?
Previous Comments:
------------------------------------------------------------------------
[2020-02-10 16:54:12] KseniMailWOW at gmail dot com
Working code happens in function void Test()
This function starts after : php_request_startup
if (sapi_module.startup(&sapi_module) != FAILURE) {
SessionInit2 = php_request_startup()!=FAILURE;
if(SessionInit2) Test();
}
// zend_declare_property_null(register_class_entry, "line", sizeof("line")-1,
ZEND_ACC_PROTECTED);
// ERROR!!!
// Project Project1.exe raised exception class $C0000005 with message 'access violation at
0x682d7e47: read of address 0x0000004c'.
// php7ts.zend_declare_property:
// 682D7E30 53 push ebx
// 682D7E31 8B5C2408 mov ebx,[esp+$08]
// 682D7E35 55 push ebp
// 682D7E36 8B6C2414 mov ebp,[esp+$14]
// 682D7E3A 56 push esi
// 682D7E3B F60301 test byte ptr [ebx],$01
// 682D7E3E 57 push edi
// 682D7E3F 7413 jz $682d7e54
// 682D7E41 8B8318010000 mov eax,[ebx+$00000118]
// 682D7E47 80784C01 cmp byte ptr [eax+$4c],$01 !!!!!!!!!!!!!!!!
------------------------------------------------------------------------
[2020-02-10 16:50:56] KseniMailWOW at gmail dot com
Sorry for not immediately providing the full code that shows errors
https://pastebin.com/1K4iiEH3
Code execution works well, but standard functions fail a function call is_persistent_class
------------------------------------------------------------------------
[2020-02-10 11:33:14] nikic@php.net
Your link does not show a use of zend_declare_property_*. Can you please show at which point you
execute this call?
------------------------------------------------------------------------
[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