diff options
-rw-r--r-- | src/vm/exceptionhandling.cpp | 4 | ||||
-rw-r--r-- | src/vm/i386/excepx86.cpp | 5 | ||||
-rw-r--r-- | tests/src/JIT/Directed/pinvoke/calli_excep.il | 4 |
3 files changed, 11 insertions, 2 deletions
diff --git a/src/vm/exceptionhandling.cpp b/src/vm/exceptionhandling.cpp index ee0ff29c5e..15346fcfdd 100644 --- a/src/vm/exceptionhandling.cpp +++ b/src/vm/exceptionhandling.cpp @@ -1011,6 +1011,10 @@ ProcessCLRException(IN PEXCEPTION_RECORD pExceptionRecord CEHelper::SetupCorruptionSeverityForActiveException((STState == ExceptionTracker::STS_FirstRethrowFrame), (pTracker->GetPreviousExceptionTracker() != NULL), CEHelper::ShouldTreatActiveExceptionAsNonCorrupting()); } + + // Failfast if exception indicates corrupted process state + if (pTracker->GetCorruptionSeverity() == ProcessCorrupting) + EEPOLICY_HANDLE_FATAL_ERROR(pExceptionRecord->ExceptionCode); } #endif // FEATURE_CORRUPTING_EXCEPTIONS diff --git a/src/vm/i386/excepx86.cpp b/src/vm/i386/excepx86.cpp index 9680e8745d..8c65db75a7 100644 --- a/src/vm/i386/excepx86.cpp +++ b/src/vm/i386/excepx86.cpp @@ -1088,6 +1088,11 @@ CPFH_RealFirstPassHandler( // ExceptionContinueSearch, etc. // of the active exception. CEHelper::SetupCorruptionSeverityForActiveException(bRethrownException, bNestedException, CEHelper::ShouldTreatActiveExceptionAsNonCorrupting()); + + // Failfast if exception indicates corrupted process state + if (pExInfo->GetCorruptionSeverity() == ProcessCorrupting) + EEPOLICY_HANDLE_FATAL_ERROR(exceptionCode); + END_SO_INTOLERANT_CODE; } #endif // FEATURE_CORRUPTING_EXCEPTIONS diff --git a/tests/src/JIT/Directed/pinvoke/calli_excep.il b/tests/src/JIT/Directed/pinvoke/calli_excep.il index 157643f70c..87683448a6 100644 --- a/tests/src/JIT/Directed/pinvoke/calli_excep.il +++ b/tests/src/JIT/Directed/pinvoke/calli_excep.il @@ -33,7 +33,7 @@ int32 V_1) .try { - ldc.i4 0xc0000005 + ldc.i4 0xC0000017 ldc.i4.0 dup dup @@ -44,7 +44,7 @@ calli void (unsigned int32, unsigned int32, unsigned int32, native uint) leave.s IL_001d } // end .try - catch [mscorlib]System.AccessViolationException + catch [mscorlib]System.OutOfMemoryException { IL_000f: stloc.0 IL_0010: ldloc.0 |