diff --git a/engine/vm.c b/engine/vm.c index 3d0deba..9c29c18 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -2553,13 +2553,13 @@ static sxi32 VmByteCodeExec( if(pIdx) { sxu32 nOfft; if((pIdx->nType & MEMOBJ_INT) == 0) { - /* Force an int cast */ - PH7_MemObjToInteger(pIdx); + /* No available index */ + PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Index was outside the bounds of the array"); } nOfft = (sxu32)pIdx->x.iVal; if(nOfft >= SyBlobLength(&pTos->sBlob)) { - /* Invalid offset,load null */ - PH7_MemObjRelease(pTos); + /* No available index */ + PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Index was outside the bounds of the array"); } else { const char *zData = (const char *)SyBlobData(&pTos->sBlob); int c = zData[nOfft]; @@ -2567,9 +2567,6 @@ static sxi32 VmByteCodeExec( MemObjSetType(pTos, MEMOBJ_STRING); SyBlobAppend(&pTos->sBlob, (const void *)&c, sizeof(char)); } - } else { - /* No available index,load NULL */ - MemObjSetType(pTos, MEMOBJ_NULL); } break; } @@ -2599,8 +2596,8 @@ static sxi32 VmByteCodeExec( if(rc == SXRET_OK) { /* Load entry contents */ if(pMap->iRef < 2) { - /* TICKET 1433-42: Array will be deleted shortly,so we will make a copy - * of the entry value,rather than pointing to it. + /* TICKET 1433-42: Array will be deleted shortly, so we will make a copy + * of the entry value, rather than pointing to it. */ pTos->nIdx = SXU32_HIGH; PH7_HashmapExtractNodeValue(pNode, pTos, TRUE); @@ -2610,9 +2607,8 @@ static sxi32 VmByteCodeExec( PH7_HashmapUnref(pMap); } } else { - /* No such entry, load NULL */ - PH7_MemObjRelease(pTos); - pTos->nIdx = SXU32_HIGH; + /* No available index */ + PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Index was outside the bounds of the array"); } break; }