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;