Author: timbo
Date: Thu Mar 28 05:30:31 2013
New Revision: 15591

Modified:
   dbi/trunk/Changes
   dbi/trunk/DBI.xs

Log:
Fixed heap-use-after-free during global destruction RT#75614

Modified: dbi/trunk/Changes
==============================================================================
--- dbi/trunk/Changes   (original)
+++ dbi/trunk/Changes   Thu Mar 28 05:30:31 2013
@@ -8,6 +8,10 @@
 
 =cut
 
+=head2 Changes in DBI 1.625
+
+  Fixed heap-use-after-free during global destruction RT#75614
+
 =head2 Changes in DBI 1.624 (svn r15576) 22nd March 2013
 
   Fixed Gofer for hash randomization in perl 5.17.10+ RT#84146

Modified: dbi/trunk/DBI.xs
==============================================================================
--- dbi/trunk/DBI.xs    (original)
+++ dbi/trunk/DBI.xs    Thu Mar 28 05:30:31 2013
@@ -3342,7 +3342,8 @@
             }
             if (ima_flags & IMA_KEEP_ERR)
                 keep_error = TRUE;
-            if (ima_flags & IMA_KEEP_ERR_SUB
+            if ((ima_flags & IMA_KEEP_ERR_SUB)
+                && !PL_dirty
                 && DBIc_PARENT_COM(imp_xxh) && 
DBIc_CALL_DEPTH(DBIc_PARENT_COM(imp_xxh)) > 0)
                 keep_error = TRUE;
             if (ima_flags & IMA_CLEAR_STMT) {
@@ -3449,6 +3450,7 @@
             DBIc_ACTIVE_off(imp_xxh);
         }
         call_depth = 0;
+        is_nested_call = 0;
     }
     else {
         DBI_SET_LAST_HANDLE(h);
@@ -3461,9 +3463,9 @@
             /* XXX sv_copy() if Profiling? */
             (void)hv_store((HV*)SvRV(parent), "Statement", 9, 
SvREFCNT_inc(tmp_sv), 0);
         }
+        is_nested_call = (!PL_dirty && (DBIc_PARENT_COM(imp_xxh) && 
(DBIc_CALL_DEPTH(DBIc_PARENT_COM(imp_xxh)) >= 1)) );
     }
 
-    is_nested_call = ( call_depth > 1 || (DBIc_PARENT_COM(imp_xxh) && 
(DBIc_CALL_DEPTH(DBIc_PARENT_COM(imp_xxh)) >= 1)) );
 
 
     /* --- dispatch --- */

Reply via email to