You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2014/04/09 19:49:41 UTC

svn commit: r1586052 - /subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c

Author: stsp
Date: Wed Apr  9 17:49:40 2014
New Revision: 1586052

URL: http://svn.apache.org/r1586052
Log:
Fix a memory lifetime bug in the ruby bindings.

* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
  (svn_swig_rb_log_entry_receiver): Make a deep copy of the received log
   entry since it might be freed before all collected entries are processed. 

The ruby bindings tests were crashing while processing log entries
obtained from a call to svn_client_mergeinfo_log_merged().
Found by the bb-openbsd buildbot with APR pool debugging enabled.

Program received signal SIGBUS, Bus error.
0x000003f32550ff97 in apr_hash_first (p=0x0, ht=0x4141414141414141)
    at /home/stsp/svn/src/apr-1.5.0/tables/apr_hash.c:148
148         hi->ht = ht;

#3  0x000003f32dabe865 in svn_swig_rb_apr_hash_to_hash_swig_type (
    hash=0x4141414141414141, 
    type_name=0x3f32067ec0b "svn_log_changed_path_t *")
    at subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1480


Modified:
    subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c

Modified: subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1586052&r1=1586051&r2=1586052&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original)
+++ subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Wed Apr  9 17:49:40 2014
@@ -1199,6 +1199,7 @@ DEFINE_DUP(auth_ssl_server_cert_info)
 DEFINE_DUP(wc_entry)
 DEFINE_DUP(client_diff_summarize)
 DEFINE_DUP(dirent)
+DEFINE_DUP(log_entry)
 DEFINE_DUP_NO_CONVENIENCE(client_commit_item3)
 DEFINE_DUP_NO_CONVENIENCE(client_proplist_item)
 DEFINE_DUP_NO_CONVENIENCE(wc_external_item2)
@@ -2162,9 +2163,7 @@ svn_swig_rb_log_entry_receiver(void *bat
 
         cbb.receiver = proc;
         cbb.message = id_call;
-        cbb.args = rb_ary_new3(1,
-                               c2r_swig_type((void *)entry,
-                                             (void *)"svn_log_entry_t *"));
+        cbb.args = rb_ary_new3(1, c2r_log_entry__dup(entry));
         invoke_callback_handle_error((VALUE)(&cbb), rb_pool, &err);
     }
     return err;