Index: base/tools_sanity_unittest.cc |
diff --git a/base/tools_sanity_unittest.cc b/base/tools_sanity_unittest.cc |
index b1da3e1aa59fc79a4fe5391d208614bf634deda0..781644fb190e55ae2295daf47f38a6e71fb35677 100644 |
--- a/base/tools_sanity_unittest.cc |
+++ b/base/tools_sanity_unittest.cc |
@@ -7,6 +7,8 @@ |
// errors to verify the sanity of the tools. |
#include "base/atomicops.h" |
+#include "base/debug/asan_invalid_access.h" |
+#include "base/debug/profiler.h" |
#include "base/message_loop/message_loop.h" |
#include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
#include "base/threading/thread.h" |
@@ -24,9 +26,12 @@ const base::subtle::Atomic32 kMagicValue = 42; |
#if defined(OS_IOS) |
// EXPECT_DEATH is not supported on IOS. |
#define HARMFUL_ACCESS(action,error_regexp) do { action; } while (0) |
+#elif defined(SYZYASAN) |
+#define HARMFUL_ACCESS(action,error_regexp) \ |
+if (debug::IsBinaryInstrumented()) { EXPECT_DEATH(action,error_regexp); } |
#else |
#define HARMFUL_ACCESS(action,error_regexp) EXPECT_DEATH(action,error_regexp) |
-#endif // !OS_IOS |
+#endif // !OS_IOS && !SYZYASAN |
#else |
#define HARMFUL_ACCESS(action,error_regexp) \ |
do { if (RunningOnValgrind()) { action; } } while (0) |
@@ -162,6 +167,7 @@ TEST(ToolsSanityTest, MAYBE_SingleElementDeletedWithBraces) { |
} |
#if defined(ADDRESS_SANITIZER) || defined(SYZYASAN) |
+ |
TEST(ToolsSanityTest, DISABLED_AddressSanitizerNullDerefCrashTest) { |
// Intentionally crash to make sure AddressSanitizer is running. |
// This test should not be ran on bots. |
@@ -193,7 +199,52 @@ TEST(ToolsSanityTest, DISABLED_AddressSanitizerGlobalOOBCrashTest) { |
*access = 43; |
} |
+TEST(ToolsSanityTest, AsanHeapOverflow) { |
+#if defined(SYZYASAN) |
+ // We won't get a meaningful error message because we're not running under the |
+ // SyzyASan logger, but we can at least make sure that the error has been |
+ // generated in the SyzyASan runtime. |
+ HARMFUL_ACCESS(AsanHeapOverflow(), "AsanRuntime::OnError") |
Timur Iskhodzhanov
2014/06/05 15:32:09
can you put the OnError stuff into the HARMFUL_ACC
Sébastien Marchand
2014/06/05 19:44:34
Nop, mostly because of ToolsSanityTest.AsanCorrupt
Timur Iskhodzhanov
2014/06/06 11:36:56
:(
Maybe we can handle only that test differently
Sébastien Marchand
2014/06/09 14:47:39
Done.
|
+#else |
+ HARMFUL_ACCESS(AsanHeapOverflow(),"to the right"); |
#endif |
+} |
+ |
+TEST(ToolsSanityTest, AsanHeapUnderflow) { |
+#if defined(SYZYASAN) |
+ // We won't get a meaningful error message because we're not running under the |
+ // SyzyASan logger, but we can at least make sure that the error has been |
+ // generated in the SyzyASan runtime. |
+ HARMFUL_ACCESS(AsanHeapUnderflow(), "AsanRuntime::OnError"); |
+#else |
+ HARMFUL_ACCESS(AsanHeapUnderflow(), "to the left"); |
+#endif |
+} |
+ |
+TEST(ToolsSanityTest, AsanHeapUseAfterFree) { |
+#if defined(SYZYASAN) |
+ // We won't get a meaningful error message because we're not running under the |
+ // SyzyASan logger, but we can at least make sure that the error has been |
+ // generated in the SyzyASan runtime. |
+ HARMFUL_ACCESS(AsanHeapUseAfterFree(), "AsanRuntime::OnError"); |
+#else |
+ HARMFUL_ACCESS(AsanHeapUseAfterFree(), "heap-use-after-free"); |
+#endif |
+} |
+ |
+#if defined(SYZYASAN) |
+TEST(ToolsSanityTest, AsanCorruptHeapBlock) { |
+ HARMFUL_ACCESS(AsanCorruptHeapBlock(), "AsanRuntime::OnError"); |
+} |
+ |
+TEST(ToolsSanityTest, AsanCorruptHeap) { |
+ // This test will kill the process by raising an exception, there's no |
+ // particular string to look for in the stack trace. |
+ HARMFUL_ACCESS(AsanCorruptHeap(), ""); |
+} |
+#endif // SYZYASAN |
+ |
+#endif // ADDRESS_SANITIZER || SYZYASAN |
namespace { |