// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include <fcntl.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #include <algorithm> #include <limits> #include <memory> #include "base/files/file_util.h" #include "base/memory/free_deleter.h" #include "base/sanitizer_buildflags.h" #include "build/build_config.h" #include "partition_alloc/buildflags.h" #include "testing/gtest/include/gtest/gtest.h" #if BUILDFLAG(IS_POSIX) #include <sys/mman.h> #include <unistd.h> #endif nothrow; numeric_limits; namespace { // This function acts as a compiler optimization barrier. We use it to // prevent the compiler from making an expression a compile-time constant. // We also use it so that the compiler doesn't discard certain return values // as something we don't need (see the comment with calloc below). template <typename Type> NOINLINE Type HideValueFromCompiler(Type value) { … } // There are platforms where these tests are known to fail. We would like to // be able to easily check the status on the bots, but marking tests as // FAILS_ is too clunky. void OverflowTestsSoftExpectTrue(bool overflow_detected) { … } #if BUILDFLAG(IS_APPLE) || defined(ADDRESS_SANITIZER) || \ defined(THREAD_SANITIZER) || defined(MEMORY_SANITIZER) || \ BUILDFLAG(IS_HWASAN) || PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) #define MAYBE_NewOverflow … #else #define MAYBE_NewOverflow … #endif // Test that array[TooBig][X] and array[X][TooBig] allocations fail and not // succeed with the wrong size allocation in case of size_t overflow. This // test is disabled on environments that operator new (nothrow) crashes in // case of size_t overflow. // // - iOS doesn't honor nothrow. // - XSan aborts when operator new returns nullptr. // - PartitionAlloc crashes by design when size_t overflows. // // TODO(crbug.com/40611888): Fix the test on Mac. TEST(SecurityTest, MAYBE_NewOverflow) { … } } // namespace