Do not allow to call non-existen array/string index.
The build was successful.
Details
The build was successful.
Details
PHP returns a NULL for each call to non-existen array element, while AerScript design disallows usage of indexes outside the bounds. This fixes one of most serious PHP problems.
This commit is contained in:
parent
91887c0185
commit
18b96064e4
16
engine/vm.c
16
engine/vm.c
|
@ -2553,13 +2553,13 @@ static sxi32 VmByteCodeExec(
|
||||||
if(pIdx) {
|
if(pIdx) {
|
||||||
sxu32 nOfft;
|
sxu32 nOfft;
|
||||||
if((pIdx->nType & MEMOBJ_INT) == 0) {
|
if((pIdx->nType & MEMOBJ_INT) == 0) {
|
||||||
/* Force an int cast */
|
/* No available index */
|
||||||
PH7_MemObjToInteger(pIdx);
|
PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Index was outside the bounds of the array");
|
||||||
}
|
}
|
||||||
nOfft = (sxu32)pIdx->x.iVal;
|
nOfft = (sxu32)pIdx->x.iVal;
|
||||||
if(nOfft >= SyBlobLength(&pTos->sBlob)) {
|
if(nOfft >= SyBlobLength(&pTos->sBlob)) {
|
||||||
/* Invalid offset,load null */
|
/* No available index */
|
||||||
PH7_MemObjRelease(pTos);
|
PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Index was outside the bounds of the array");
|
||||||
} else {
|
} else {
|
||||||
const char *zData = (const char *)SyBlobData(&pTos->sBlob);
|
const char *zData = (const char *)SyBlobData(&pTos->sBlob);
|
||||||
int c = zData[nOfft];
|
int c = zData[nOfft];
|
||||||
|
@ -2567,9 +2567,6 @@ static sxi32 VmByteCodeExec(
|
||||||
MemObjSetType(pTos, MEMOBJ_STRING);
|
MemObjSetType(pTos, MEMOBJ_STRING);
|
||||||
SyBlobAppend(&pTos->sBlob, (const void *)&c, sizeof(char));
|
SyBlobAppend(&pTos->sBlob, (const void *)&c, sizeof(char));
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
/* No available index,load NULL */
|
|
||||||
MemObjSetType(pTos, MEMOBJ_NULL);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2610,9 +2607,8 @@ static sxi32 VmByteCodeExec(
|
||||||
PH7_HashmapUnref(pMap);
|
PH7_HashmapUnref(pMap);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* No such entry, load NULL */
|
/* No available index */
|
||||||
PH7_MemObjRelease(pTos);
|
PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Index was outside the bounds of the array");
|
||||||
pTos->nIdx = SXU32_HIGH;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue