Apply patch for [CVE-2012-2677][boost] ordered_malloc() overflow
[external/boost.git] / libs / smart_ptr / test / auto_ptr_rv_test.cpp
1 //
2 //  auto_ptr_rv_test.cpp
3 //
4 //  Copyright (c) 2006 Peter Dimov
5 //
6 // Distributed under the Boost Software License, Version 1.0.
7 // See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt
9 //
10
11 #include <boost/shared_ptr.hpp>
12 #include <boost/detail/lightweight_test.hpp>
13 #include <memory>
14
15 struct X
16 {
17     static long instances;
18
19     X()
20     {
21         ++instances;
22     }
23
24     ~X()
25     {
26         --instances;
27     }
28
29     static std::auto_ptr<X> create()
30     {
31         return std::auto_ptr<X>( new X );
32     }
33
34 private:
35
36     X( X const & );
37     X & operator=( X const & );
38 };
39
40 long X::instances = 0;
41
42 int main()
43 {
44     BOOST_TEST( X::instances == 0 );
45
46     {
47         boost::shared_ptr<X> p( X::create() );
48         BOOST_TEST( X::instances == 1 );
49
50         p = X::create();
51         BOOST_TEST( X::instances == 1 );
52
53         p.reset();
54         BOOST_TEST( X::instances == 0 );
55
56         p = X::create();
57         BOOST_TEST( X::instances == 1 );
58     }
59
60     BOOST_TEST( X::instances == 0 );
61
62     {
63         boost::shared_ptr<X const> p( X::create() );
64         BOOST_TEST( X::instances == 1 );
65
66         p = X::create();
67         BOOST_TEST( X::instances == 1 );
68
69         p.reset();
70         BOOST_TEST( X::instances == 0 );
71
72         p = X::create();
73         BOOST_TEST( X::instances == 1 );
74     }
75
76     BOOST_TEST( X::instances == 0 );
77
78     {
79         boost::shared_ptr<void> p( X::create() );
80         BOOST_TEST( X::instances == 1 );
81
82         p = X::create();
83         BOOST_TEST( X::instances == 1 );
84
85         p.reset();
86         BOOST_TEST( X::instances == 0 );
87
88         p = X::create();
89         BOOST_TEST( X::instances == 1 );
90     }
91
92     BOOST_TEST( X::instances == 0 );
93
94     {
95         boost::shared_ptr<void const> p( X::create() );
96         BOOST_TEST( X::instances == 1 );
97
98         p = X::create();
99         BOOST_TEST( X::instances == 1 );
100
101         p.reset();
102         BOOST_TEST( X::instances == 0 );
103
104         p = X::create();
105         BOOST_TEST( X::instances == 1 );
106     }
107
108     BOOST_TEST( X::instances == 0 );
109
110     return boost::report_errors();
111 }