Apply patch for [CVE-2012-2677][boost] ordered_malloc() overflow
[external/boost.git] / libs / smart_ptr / test / shared_ptr_rv_test.cpp
1 //
2 //  shared_ptr_rv_test.cpp
3 //
4 //  Copyright (c) 2007 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
14 struct X
15 {
16     static long instances;
17
18     X()
19     {
20         ++instances;
21     }
22
23     ~X()
24     {
25         --instances;
26     }
27
28     static boost::shared_ptr<X> create()
29     {
30         return boost::shared_ptr<X>( new X );
31     }
32
33 private:
34
35     X( X const & );
36     X & operator=( X const & );
37 };
38
39 long X::instances = 0;
40
41 int main()
42 {
43     BOOST_TEST( X::instances == 0 );
44
45     {
46         boost::shared_ptr<X> p( X::create() );
47         BOOST_TEST( X::instances == 1 );
48
49         p = X::create();
50         BOOST_TEST( X::instances == 1 );
51
52         p.reset();
53         BOOST_TEST( X::instances == 0 );
54
55         p = X::create();
56         BOOST_TEST( X::instances == 1 );
57     }
58
59     BOOST_TEST( X::instances == 0 );
60
61     {
62         boost::shared_ptr<X const> p( X::create() );
63         BOOST_TEST( X::instances == 1 );
64
65         p = X::create();
66         BOOST_TEST( X::instances == 1 );
67
68         p.reset();
69         BOOST_TEST( X::instances == 0 );
70
71         p = X::create();
72         BOOST_TEST( X::instances == 1 );
73     }
74
75     BOOST_TEST( X::instances == 0 );
76
77     {
78         boost::shared_ptr<void> p( X::create() );
79         BOOST_TEST( X::instances == 1 );
80
81         p = X::create();
82         BOOST_TEST( X::instances == 1 );
83
84         p.reset();
85         BOOST_TEST( X::instances == 0 );
86
87         p = X::create();
88         BOOST_TEST( X::instances == 1 );
89     }
90
91     BOOST_TEST( X::instances == 0 );
92
93     {
94         boost::shared_ptr<void const> p( X::create() );
95         BOOST_TEST( X::instances == 1 );
96
97         p = X::create();
98         BOOST_TEST( X::instances == 1 );
99
100         p.reset();
101         BOOST_TEST( X::instances == 0 );
102
103         p = X::create();
104         BOOST_TEST( X::instances == 1 );
105     }
106
107     BOOST_TEST( X::instances == 0 );
108
109     return boost::report_errors();
110 }