diff --git a/IDEHelper/DbgExprEvaluator.cpp b/IDEHelper/DbgExprEvaluator.cpp index b014cc39..2eb33ce4 100644 --- a/IDEHelper/DbgExprEvaluator.cpp +++ b/IDEHelper/DbgExprEvaluator.cpp @@ -7937,6 +7937,11 @@ DbgTypedValue DbgExprEvaluator::Resolve(BfExpression* expr, DbgType* wantType) SetAndRestoreValue prevType(mExpectingType, wantType); SetAndRestoreValue prevResult(mResult, DbgTypedValue()); + if ((mExpressionFlags & DwEvalExpressionFlag_AllowCalls) != 0) + { + BF_ASSERT(mCallResults != NULL); + } + if (mExplicitThis) mExplicitThis = FixThis(mExplicitThis); diff --git a/IDEHelper/WinDebugger.cpp b/IDEHelper/WinDebugger.cpp index c1eed6c8..e08fd7a0 100644 --- a/IDEHelper/WinDebugger.cpp +++ b/IDEHelper/WinDebugger.cpp @@ -3704,7 +3704,7 @@ bool WinDebugger::CheckConditionalBreakpoint(WdBreakpoint* breakpoint, DbgSubpro conditional->mDbgEvaluationContext->mDbgExprEvaluator->mSubjectExpr = subjectExpr; conditional->mDbgEvaluationContext->mDbgExprEvaluator->mDbgCompileUnit = subprogram->mCompileUnit; conditional->mDbgEvaluationContext->mDbgExprEvaluator->mCallStackIdx = 0; - conditional->mDbgEvaluationContext->mDbgExprEvaluator->mExpressionFlags = (DwEvalExpressionFlags)(DwEvalExpressionFlag_AllowSideEffects | DwEvalExpressionFlag_AllowCalls); + conditional->mDbgEvaluationContext->mDbgExprEvaluator->mExpressionFlags = (DwEvalExpressionFlags)(DwEvalExpressionFlag_AllowSideEffects); } WdStackFrame* wdStackFrame = new WdStackFrame(); @@ -3726,6 +3726,11 @@ bool WinDebugger::CheckConditionalBreakpoint(WdBreakpoint* breakpoint, DbgSubpro mDebugManager->mOutMessages.push_back(condError); return true; } + else if (conditional->mDbgEvaluationContext->mDbgExprEvaluator->mBlockedSideEffects) + { + mDebugManager->mOutMessages.push_back(StrFormat("error Conditional breakpoint expression '%s' contained function calls, which is not allowed", conditional->mExpr.c_str())); + return true; + } else if ((!result) || (!result.mType->IsBoolean())) { mDebugManager->mOutMessages.push_back(StrFormat("error Conditional breakpoint expression '%s' must result in a boolean value", conditional->mExpr.c_str()));