From: Marcus Boerger Date: Mon, 7 Aug 2006 23:16:20 +0000 (+0000) Subject: - Fixed Bug #38064 ignored constructor visibility X-Git-Tag: RELEASE_1_0_0RC1~2050 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5e9acea82e8f648960698e34b8f92f9e208dc9b2;p=php - Fixed Bug #38064 ignored constructor visibility --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 96757e533d..6f75b14bba 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1789,6 +1789,9 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, ANY, CONST|TMP|VAR|UNUSED|CV) if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } + if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + zend_error(E_COMPILE_ERROR, "Cannot call private %v::__constrcut()", ce->name); + } EX(fbc) = ce->constructor; } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 133ba00af7..7b8b94f1b7 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -680,6 +680,9 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } + if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + zend_error(E_COMPILE_ERROR, "Cannot call private %v::__constrcut()", ce->name); + } EX(fbc) = ce->constructor; } @@ -898,6 +901,9 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } + if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + zend_error(E_COMPILE_ERROR, "Cannot call private %v::__constrcut()", ce->name); + } EX(fbc) = ce->constructor; } @@ -1031,6 +1037,9 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } + if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + zend_error(E_COMPILE_ERROR, "Cannot call private %v::__constrcut()", ce->name); + } EX(fbc) = ce->constructor; } @@ -1163,6 +1172,9 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } + if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + zend_error(E_COMPILE_ERROR, "Cannot call private %v::__constrcut()", ce->name); + } EX(fbc) = ce->constructor; } @@ -1253,6 +1265,9 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } + if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + zend_error(E_COMPILE_ERROR, "Cannot call private %v::__constrcut()", ce->name); + } EX(fbc) = ce->constructor; }