The StructuredExceptionHandlerSuppressor was added in Bug 67510 so that WebKit would generate useful stack traces when null pointers or other invalid data were being passed through the WebKit infrastructure. The intention was to allow us to crash when null pointers or other runtime exceptions were generated.
Unfortunately, because Windows C++ exceptions are built on top of the underlying structured-exception-handling infrastructure, this caused valid C++ exception handler to stop working. (For details on this, see http://www.microsoft.com/msj/0197/Exception/Exception.aspx, http://www.microsoft.com/msj/archive/S2CE.aspx, http://www.hexblog.com/wp-content/uploads/2012/06/Recon-2012-Skochinsky-Compiler-Internals.pdf, http://www.codeproject.com/Articles/2126/How-a-C-compiler-implements-exception-handling).
This was observed when a support library was modified to use a C++ exception as part of its handling of certain device setup logic. Although the exception was fully captured and handled inside the support library, our manipulation of the SEH call chain caused the entire exception handling system to break causing a 'normal' code path for our support library to suddenly turn into a critical failure.
This bug revises the StructuredExceptionHandlerSuppressor to apply a filter to the exceptions it chooses to abort. For most exception classes, it passes exception handling up the chain so that the proper handler can be invoked. However, we force a crash for access violations, memory corruption, etc. as desired.
Created attachment 210806 [details]
Created attachment 210808 [details]
Note: This logic will need to be extended to support 64-bit Windows. See referenced bug 120906 for this work.
Committed r155226: <http://trac.webkit.org/changeset/155226>