This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]