The attached patch makes the Ruby 2.2 test suite failure I mentioned in
[0] go away, but this is all code I'm pretty unfamiliar with.

https://mail-archives.apache.org/mod_mbox/subversion-dev/201511.mbox/ajax/%3C20151108030937.GC8248%40freya.jamessan.com%3E

[[[
Create a new Ruby Object instead of attempting to modify nil.

Starting in Ruby 2.2, the nil, true, and false objects are frozen.  This
was causing test_repos.rb's test_load to fail due to calling
"repos.load_fs(nil)".  This results in svn_swig_rb_make_stream trying to
attributes on nil, which isn't allowed.

* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:
  (svn_swig_rb_make_stream): Create a new Object if the given io is nil.
   Also call svn_swig_rb_get_pool in order to deduplicate some
   pool-handling code.
]]]

Cheers,
-- 
James
GPG Key: 4096R/331BA3DB 2011-12-05 James McCoy <james...@debian.org>
commit 6c69127693e9e395c026d982f871253548037a4d
Author: James McCoy <james...@debian.org>
Date:   Sun Nov 8 23:06:45 2015 -0500

    Create a new Ruby Object instead of attempting to modify nil.
    
    Starting in Ruby 2.2, the nil, true, and false objects are frozen.  This
    was causing test_repos.rb's test_load to fail due to calling
    "repos.load_fs(nil)".  This results in svn_swig_rb_make_stream trying to
    attributes on nil, which isn't allowed.
    
    * subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:
      (svn_swig_rb_make_stream): Create a new Object if the given io is nil.
       Also call svn_swig_rb_get_pool in order to deduplicate some
       pool-handling code.

diff --git a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
index a25ec5a..2210853 100644
--- a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
+++ b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
@@ -3230,14 +3230,16 @@ svn_swig_rb_make_stream(VALUE io)
     stream_p = &stream;
     r2c_swig_type2(io, "svn_stream_t *", (void **)stream_p);
   } else {
+    if (NIL_P(io)) {
+      io = rb_class_new_instance(0, NULL, rb_cObject);
+    }
     VALUE rb_pool = rb_pool_new(Qnil);
-    apr_pool_wrapper_t *pool_wrapper;
-    apr_pool_wrapper_t **pool_wrapper_p;
+    apr_pool_t *pool;
+
+    svn_swig_rb_get_pool(0, NULL, io, &rb_pool, &pool);
 
     rb_set_pool(io, rb_pool);
-    pool_wrapper_p = &pool_wrapper;
-    r2c_swig_type2(rb_pool, "apr_pool_wrapper_t *", (void **)pool_wrapper_p);
-    stream = svn_stream_create((void *)io, pool_wrapper->pool);
+    stream = svn_stream_create((void *)io, pool);
     svn_stream_set_read2(stream, NULL /* only full read support */,
                          read_handler_rbio);
     svn_stream_set_write(stream, write_handler_rbio);

Reply via email to