|  | // 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" | 
|  | #include "build/build_config.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace debug { | 
|  |  | 
|  | #if defined(ADDRESS_SANITIZER) | 
|  |  | 
|  | // 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(); | 
|  |  | 
|  | // The "corrupt-block" and "corrupt-heap" classes of bugs is specific to | 
|  | // Windows. | 
|  | #if defined(OS_WIN) | 
|  | // 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  // OS_WIN | 
|  | #endif  // ADDRESS_SANITIZER | 
|  |  | 
|  | }  // namespace debug | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_DEBUG_ASAN_INVALID_ACCESS_H_ |