From 1bf5c3a8a2daaf7a89a15eb89ac9dc5d0fbc1246 Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 29 May 2019 20:16:02 +0200 Subject: [PATCH] Consider private attributes to be accessed. Fix access check. --- engine/vm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/vm.c b/engine/vm.c index 17cf8bd..01e3071 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -4215,7 +4215,7 @@ static sxi32 VmByteCodeExec( if(SyStrncmp(pObjAttr->pAttr->sName.zString, sName.zString, sName.nByte) == 0) { if(pNos->iFlags != MEMOBJ_PARENTOBJ && pObjAttr->pAttr->pClass == pClass) { break; - } else if(pNos->iFlags != MEMOBJ_BASEOBJ && pObjAttr->pAttr->iProtection != PH7_CLASS_PROT_PRIVATE) { + } else if(pNos->iFlags != MEMOBJ_BASEOBJ) { SyHashEntry *pDerived = SyHashGet(&pClass->hDerived, (const void *)pObjAttr->pAttr->pClass->sName.zString, pObjAttr->pAttr->pClass->sName.nByte); if(pDerived != 0) { ph7_class *pSub = (ph7_class *)pDerived->pUserData; @@ -4244,7 +4244,7 @@ static sxi32 VmByteCodeExec( if(pObjAttr) { ph7_value *pValue = 0; /* cc warning */ /* Check attribute access */ - if(VmClassMemberAccess(&(*pVm), pClass, pObjAttr->pAttr->iProtection)) { + if(VmClassMemberAccess(&(*pVm), pObjAttr->pAttr->pClass, pObjAttr->pAttr->iProtection)) { /* Load attribute */ pValue = (ph7_value *)SySetAt(&pVm->aMemObj, pObjAttr->nIdx); if(pValue) { @@ -4266,7 +4266,7 @@ static sxi32 VmByteCodeExec( } } else { PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, - "Class attribute '%z->%z' is inaccessible due to its protection level", &pClass->sName, &pObjAttr->pAttr->sName); + "Class attribute '%z->%z' is inaccessible due to its protection level", &pObjAttr->pAttr->pClass->sName, &pObjAttr->pAttr->sName); } } /* Safely unreference the object */