From 7320b491ec63d1e8aeb9604f7d0e96e614cf94eb Mon Sep 17 00:00:00 2001 From: Earl Chew Date: Sat, 26 Feb 2005 23:34:36 +0000 Subject: [PATCH] stl_tree.h (_Rb_tree<>::_M_insert): Don't leak memory if _M_key_compare throws. 2005-02-26 Earl Chew Christopher Jefferson * include/bits/stl_tree.h (_Rb_tree<>::_M_insert): Don't leak memory if _M_key_compare throws. Co-Authored-By: Chris Jefferson From-SVN: r95597 --- libstdc++-v3/ChangeLog | 6 ++++++ libstdc++-v3/include/bits/stl_tree.h | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3982be6402d..441bb58ad3e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2005-02-26 Earl Chew + Christopher Jefferson + + * include/bits/stl_tree.h (_Rb_tree<>::_M_insert): Don't leak + memory if _M_key_compare throws. + 2005-02-25 Paolo Carlini * include/tr1/type_traits: Add the trivial is_union and is_class; diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 4da42c168fe..c5145636075 100644 --- a/libstdc++-v3/include/bits/stl_tree.h +++ b/libstdc++-v3/include/bits/stl_tree.h @@ -786,12 +786,11 @@ namespace std _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert(_Base_ptr __x, _Base_ptr __p, const _Val& __v) { - _Link_type __z = _M_create_node(__v); - bool __insert_left; + bool __insert_left = (__x != 0 || __p == _M_end() + || _M_impl._M_key_compare(_KeyOfValue()(__v), + _S_key(__p))); - __insert_left = (__x != 0 || __p == _M_end() - || _M_impl._M_key_compare(_KeyOfValue()(__v), - _S_key(__p))); + _Link_type __z = _M_create_node(__v); _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, this->_M_impl._M_header); -- 2.30.2