| Index: chrome_frame/crash_reporting/vectored_handler_unittest.cc
|
| ===================================================================
|
| --- chrome_frame/crash_reporting/vectored_handler_unittest.cc (revision 36161)
|
| +++ chrome_frame/crash_reporting/vectored_handler_unittest.cc (working copy)
|
| @@ -6,11 +6,12 @@
|
|
|
| #include "base/logging.h"
|
| #include "chrome_frame/crash_reporting/vectored_handler-impl.h"
|
| +#include "chrome_frame/crash_reporting/crash_report.h"
|
| #include "gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| // Class that mocks external call from VectoredHandlerT for testing purposes.
|
| -class EMock : public VEHTraitsBase {
|
| +class EMock : public Win32VEHTraits {
|
| public:
|
| static inline bool WriteDump(EXCEPTION_POINTERS* p) {
|
| g_dump_made = true;
|
| @@ -20,6 +21,7 @@
|
| static inline void* Register(PVECTORED_EXCEPTION_HANDLER func,
|
| const void* module_start,
|
| const void* module_end) {
|
| + InitializeIgnoredBlocks();
|
| VEHTraitsBase::SetModule(module_start, module_end);
|
| // Return some arbitrary number, expecting to get the same on Unregister()
|
| return reinterpret_cast<void*>(4);
|
| @@ -188,5 +190,25 @@
|
| EXPECT_TRUE(EMock::g_dump_made);
|
| EMock::g_dump_made = false;
|
|
|
| + // Exception, in IsBadStringPtrA, we are on the stack.
|
| + char* ignore_address = reinterpret_cast<char*>(GetProcAddress(
|
| + GetModuleHandleA("kernel32.dll"), "IsBadStringPtrA")) + 10;
|
| + ex.Set(STATUS_ACCESS_VIOLATION, ignore_address + 10, 0);
|
| + EMock::SetNoSEHFilter();
|
| + EMock::SetOnStack();
|
| + EXPECT_EQ(ExceptionContinueSearch, VectoredHandlerMock::VectoredHandler(&ex));
|
| + EXPECT_EQ(5, VectoredHandlerMock::g_exceptions_seen);
|
| + EXPECT_FALSE(EMock::g_dump_made);
|
| + EMock::g_dump_made = false;
|
| +
|
| + // Exception, in IsBadStringPtrA, we are not in stack.
|
| + ex.Set(STATUS_ACCESS_VIOLATION, ignore_address + 10, 0);
|
| + EMock::SetNoSEHFilter();
|
| + EMock::SetNotOnStack();
|
| + EXPECT_EQ(ExceptionContinueSearch, VectoredHandlerMock::VectoredHandler(&ex));
|
| + EXPECT_EQ(6, VectoredHandlerMock::g_exceptions_seen);
|
| + EXPECT_FALSE(EMock::g_dump_made);
|
| + EMock::g_dump_made = false;
|
| +
|
| VectoredHandlerMock::Unregister();
|
| }
|
|
|