This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[libstdc++ PATCH] Fix leak in _Rb_tree::_M_insert (stl_tree.h)
- From: Earl Chew <earl_chew at agilent dot com>
- To: libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Thu, 24 Feb 2005 18:18:10 -0800
- Subject: [libstdc++ PATCH] Fix leak in _Rb_tree::_M_insert (stl_tree.h)
Running the exception test suite from STLPort uncovers a
leak in _Rb_tree::_M_insert when an exception is thrown from
a comparator.
Earl
--- stl_tree.h.orig 2004-12-12 08:14:30.000000000 -0800
+++ stl_tree.h 2005-02-24 16:57:15.000000000 -0800
@@ -781,9 +781,17 @@
_Link_type __z = _M_create_node(__v);
bool __insert_left;
- __insert_left = __x != 0 || __p == _M_end()
- || _M_impl._M_key_compare(_KeyOfValue()(__v),
- _S_key(__p));
+ try
+ {
+ __insert_left = __x != 0 || __p == _M_end()
+ || _M_impl._M_key_compare(_KeyOfValue()(__v),
+ _S_key(__p));
+ }
+ catch(...)
+ {
+ destroy_node(__z);
+ __throw_exception_again;
+ }
_Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
this->_M_impl._M_header);