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