| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Defines some functions that intentionally do an invalid memory access in |
| // order to trigger an AddressSanitizer (ASan) error report. |
| |
| #ifndef BASE_DEBUG_ASAN_INVALID_ACCESS_H_ |
| #define BASE_DEBUG_ASAN_INVALID_ACCESS_H_ |
| |
| #include "base/base_export.h" |
| #include "base/compiler_specific.h" |
| |
| namespace base { |
| namespace debug { |
| |
| #if defined(ADDRESS_SANITIZER) || defined(SYZYASAN) |
| |
| // Generates an heap buffer overflow. |
| BASE_EXPORT NOINLINE void AsanHeapOverflow(); |
| |
| // Generates an heap buffer underflow. |
| BASE_EXPORT NOINLINE void AsanHeapUnderflow(); |
| |
| // Generates an use after free. |
| BASE_EXPORT NOINLINE void AsanHeapUseAfterFree(); |
| |
| #endif // ADDRESS_SANITIZER || SYZYASAN |
| |
| // The "corrupt-block" and "corrupt-heap" classes of bugs is specific to |
| // SyzyASan. |
| #if defined(SYZYASAN) && defined(COMPILER_MSVC) |
| |
| // Corrupts a memory block and makes sure that the corruption gets detected when |
| // we try to free this block. |
| BASE_EXPORT NOINLINE void AsanCorruptHeapBlock(); |
| |
| // Corrupts the heap and makes sure that the corruption gets detected when a |
| // crash occur. |
| BASE_EXPORT NOINLINE void AsanCorruptHeap(); |
| |
| #endif // SYZYASAN && COMPILER_MSVC |
| |
| } // namespace debug |
| } // namespace base |
| |
| #endif // BASE_DEBUG_ASAN_INVALID_ACCESS_H_ |