From 891818d601b7219286800b66bd7f76e60c3ae98e Mon Sep 17 00:00:00 2001 From: belliash Date: Sun, 24 Mar 2019 13:33:15 +0100 Subject: [PATCH] Fix PH7_CheckVarCompat(). Array can be assigned only to array. --- engine/memobj.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/engine/memobj.c b/engine/memobj.c index cfa3f85..a368d17 100644 --- a/engine/memobj.c +++ b/engine/memobj.c @@ -363,17 +363,19 @@ static ph7_real MemObjCharValue(ph7_value *pObj) { * Checks a ph7_value variable compatibility with nType data type. */ PH7_PRIVATE sxi32 PH7_CheckVarCompat(ph7_value *pObj, int nType) { - if(nType == MEMOBJ_REAL && (pObj->iFlags & MEMOBJ_INT)) { - return SXRET_OK; - } else if(nType == MEMOBJ_CHAR && (pObj->iFlags & MEMOBJ_INT)) { - return SXRET_OK; - } else if(nType == MEMOBJ_CHAR && (pObj->iFlags & MEMOBJ_STRING)) { - int len = SyBlobLength(&pObj->sBlob); - if(len == 0 || len == 1) { + if(((nType & MEMOBJ_HASHMAP) && (pObj->iFlags & MEMOBJ_HASHMAP)) || (((nType & MEMOBJ_HASHMAP) == 0) && ((pObj->iFlags & MEMOBJ_HASHMAP) == 0))) { + if((nType & MEMOBJ_REAL) && (pObj->iFlags & MEMOBJ_INT)) { + return SXRET_OK; + } else if((nType & MEMOBJ_CHAR) && (pObj->iFlags & MEMOBJ_INT)) { + return SXRET_OK; + } else if((nType & MEMOBJ_CHAR) && (pObj->iFlags & MEMOBJ_STRING)) { + int len = SyBlobLength(&pObj->sBlob); + if(len == 0 || len == 1) { + return SXRET_OK; + } + } else if((nType & MEMOBJ_CALL) && (pObj->iFlags & MEMOBJ_STRING)) { return SXRET_OK; } - } else if(nType == MEMOBJ_CALL && (pObj->iFlags & MEMOBJ_STRING)) { - return SXRET_OK; } return SXERR_NOMATCH; }