mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Don't reconstruct expression on encountering fatal error
In some cases, like when given ```cpp std::vector<char>* str = reinterpret_cast<std::vector<char>*>(0x1234458); CHECK(*str == std::vector<char>()); ``` reconstructing the expression to report it would cause another fatal error. Instead we just put together an AssertionResult without reconstructing the expression fully. This should fully fix #810
This commit is contained in:
		| @@ -53,7 +53,6 @@ namespace Catch { | ||||
|         static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { | ||||
|             for (int i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { | ||||
|                 if (ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) { | ||||
|                     reset(); | ||||
|                     reportFatal(signalDefs[i].name); | ||||
|                 } | ||||
|             } | ||||
|   | ||||
| @@ -224,10 +224,14 @@ namespace Catch { | ||||
|         } | ||||
|  | ||||
|         virtual void handleFatalErrorCondition( std::string const& message ) { | ||||
|             ResultBuilder resultBuilder = makeUnexpectedResultBuilder(); | ||||
|             resultBuilder.setResultType( ResultWas::FatalErrorCondition ); | ||||
|             resultBuilder << message; | ||||
|             resultBuilder.captureExpression(); | ||||
|             // Don't rebuild the result -- the stringification itself can cause more fatal errors | ||||
|             // Instead, fake a result data. | ||||
|             AssertionResultData tempResult; | ||||
|             tempResult.resultType = ResultWas::FatalErrorCondition; | ||||
|             tempResult.message = message; | ||||
|             AssertionResult result(m_lastAssertionInfo, tempResult); | ||||
|  | ||||
|             getResultCapture().assertionEnded(result); | ||||
|  | ||||
|             handleUnfinishedSections(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský