]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/util/testsuite_new_operators.h
Fix out-of-bound array accesses in libstdc++ testsuite
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / util / testsuite_new_operators.h
CommitLineData
970a9caa 1// -*- C++ -*-
f92ab29f 2// Utility subroutines for the C++ library testsuite.
970a9caa 3//
818ab71a 4// Copyright (C) 2000-2016 Free Software Foundation, Inc.
970a9caa
FD
5//
6// This file is part of the GNU ISO C++ Library. This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11//
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING3. If not see
19// <http://www.gnu.org/licenses/>.
20//
21
22#ifndef _GLIBCXX_TESTSUITE_NEW_OPERATORS_H
23#define _GLIBCXX_TESTSUITE_NEW_OPERATORS_H
24
25#include <new>
26
27namespace __gnu_test
28{
29 std::size_t&
30 get_new_limit()
31 {
32 static std::size_t limit = 1024 * 1024;
33 return limit;
34 }
35
36 void
37 set_new_limit(std::size_t l)
38 { get_new_limit() = l; }
39}
40
41void* operator new(std::size_t size) throw(std::bad_alloc)
42{
43 if (size > __gnu_test::get_new_limit())
44 throw std::bad_alloc();
45
46 void* p = std::malloc(size);
47 if (!p)
48 throw std::bad_alloc();
49
50 return p;
51}
52
53void* operator new (std::size_t size, const std::nothrow_t&) throw()
54{
55 if (size > __gnu_test::get_new_limit())
56 return 0;
57
58 return std::malloc(size);
59}
60
61void operator delete(void* p) throw()
62{
63 if (p)
64 std::free(p);
65}
66
67#endif // _GLIBCXX_TESTSUITE_NEW_OPERATORS_H
68
69