From 9880f9963e264e1c5124730a24ff551c12b823d3 Mon Sep 17 00:00:00 2001 From: belliash Date: Thu, 4 Apr 2019 18:15:41 +0200 Subject: [PATCH] Fix static and non-static class attributes. Now access to non-initialized arrays member does not result in segmentation fault. --- engine/vm.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/engine/vm.c b/engine/vm.c index 7972474..b870944 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -644,6 +644,13 @@ static sxi32 VmMountUserClass( if(rc != SXRET_OK) { PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Cannot assign a value of incompatible type to variable '%z::$%z'", &pClass->sName, &pAttr->sName); } + } else if(pMemObj->iFlags & MEMOBJ_HASHMAP) { + ph7_hashmap *pMap; + pMap = PH7_NewHashmap(&(*pVm), 0, 0); + if(pMap == 0) { + PH7_VmMemoryError(&(*pVm)); + } + pMemObj->x.pOther = pMap; } /* Free up memory */ PH7_MemObjRelease(pResult); @@ -712,6 +719,13 @@ PH7_PRIVATE sxi32 PH7_VmCreateClassInstanceFrame( if(rc != SXRET_OK) { PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Cannot assign a value of incompatible type to variable '%z::$%z'", &pClass->sName, &pAttr->sName); } + } else if(pMemObj->iFlags & MEMOBJ_HASHMAP) { + ph7_hashmap *pMap; + pMap = PH7_NewHashmap(&(*pVm), 0, 0); + if(pMap == 0) { + PH7_VmMemoryError(&(*pVm)); + } + pMemObj->x.pOther = pMap; } /* Free up memory */ PH7_MemObjRelease(pResult);