From 55c83d707607c60daaa8fad93561fbd5af61bf48 Mon Sep 17 00:00:00 2001 From: EinBurgbauer Date: Tue, 18 May 2021 11:06:40 +0200 Subject: [PATCH 1/3] handle ce fail mFile index of -1 --- IDEHelper/Compiler/CeMachine.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/IDEHelper/Compiler/CeMachine.cpp b/IDEHelper/Compiler/CeMachine.cpp index 17375e6d..8e4e6727 100644 --- a/IDEHelper/Compiler/CeMachine.cpp +++ b/IDEHelper/Compiler/CeMachine.cpp @@ -2951,19 +2951,21 @@ BfError* CeContext::Fail(const CeFrame& curFrame, const StringImpl& str) err += mCeMachine->mCeModule->MethodToString(ceFunction->mCeInnerFunctionInfo->mOwner->mMethodInstance, BfMethodNameFlag_OmitParams); } } - + if ((emitEntry != NULL) && (emitEntry->mFile != -1)) + { err += StrFormat(" at line% d:%d in %s", emitEntry->mLine + 1, emitEntry->mColumn + 1, ceFunction->mFiles[emitEntry->mFile].c_str()); - auto moreInfo = passInstance->MoreInfo(err, mCeMachine->mCeModule->mCompiler->GetAutoComplete() != NULL); - if ((moreInfo != NULL) && (emitEntry != NULL)) - { - BfErrorLocation* location = new BfErrorLocation(); - location->mFile = ceFunction->mFiles[emitEntry->mFile]; - location->mLine = emitEntry->mLine; - location->mColumn = emitEntry->mColumn; - moreInfo->mLocation = location; - } + auto moreInfo = passInstance->MoreInfo(err, mCeMachine->mCeModule->mCompiler->GetAutoComplete() != NULL); + if ((moreInfo != NULL)) + { + BfErrorLocation* location = new BfErrorLocation(); + location->mFile = ceFunction->mFiles[emitEntry->mFile]; + location->mLine = emitEntry->mLine; + location->mColumn = emitEntry->mColumn; + moreInfo->mLocation = location; + } + } } return bfError; From 8c3744cd0c5e3c2bbacddb48022087d274410952 Mon Sep 17 00:00:00 2001 From: EinBurgbauer Date: Sun, 23 May 2021 11:32:40 +0200 Subject: [PATCH 2/3] fix CEMethodInfo getparam crash --- IDEHelper/Compiler/CeMachine.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/CeMachine.cpp b/IDEHelper/Compiler/CeMachine.cpp index 8e4e6727..872ca3f3 100644 --- a/IDEHelper/Compiler/CeMachine.cpp +++ b/IDEHelper/Compiler/CeMachine.cpp @@ -4627,7 +4627,13 @@ bool CeContext::Execute(CeFunction* startFunction, uint8* startStackPtr, uint8* _Fail("Invalid method instance"); return false; } - + + if (paramIdx < 0 || paramIdx > methodInstance->mParams.mSize) + { + _Fail("paramIdx is out of range"); + return false; + } + addr_ce stringAddr = GetString(methodInstance->GetParamName(paramIdx)); _FixVariables(); *(int32*)(stackPtr + 0) = methodInstance->GetParamType(paramIdx)->mTypeId; From 219f9cc40b7a075617a0d77d28a329bddf487d92 Mon Sep 17 00:00:00 2001 From: EinBurgbauer Date: Sun, 23 May 2021 11:47:39 +0200 Subject: [PATCH 3/3] fix out of range check mistake --- IDEHelper/Compiler/CeMachine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/CeMachine.cpp b/IDEHelper/Compiler/CeMachine.cpp index 872ca3f3..dae24555 100644 --- a/IDEHelper/Compiler/CeMachine.cpp +++ b/IDEHelper/Compiler/CeMachine.cpp @@ -4628,7 +4628,7 @@ bool CeContext::Execute(CeFunction* startFunction, uint8* startStackPtr, uint8* return false; } - if (paramIdx < 0 || paramIdx > methodInstance->mParams.mSize) + if (paramIdx < 0 || paramIdx >= methodInstance->mParams.mSize) { _Fail("paramIdx is out of range"); return false;