[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

SWIG-python bindings broken for svn_fs_change_rev_prop2(... old_value_p ...)

From: Julian Foad <julianfoad_at_apache.org>
Date: Fri, 26 Oct 2018 09:26:37 +0100

svn_fs_change_rev_prop2(... old_value_p ...) crashes in 1.9.9.

The problem is with its 4th parameter, "const svn_string_t *const *old_value_p".

In 1.10.x the binding throws an "unimplemented" exception instead of crashing, because of the patch applied in
http://svn.apache.org/r1700966 -- "Disable wrappers that aren't working."
This patch adds the following type-map in subversion/bindings/swig/include/svn_types.swg:

[[[
%typemap(in,warning="901:FIXME: Missing old_value_p typemap") const svn_string_t *const *old_value_p {
...
  SWIG_exception(SWIG_ValueError, "$symname is not implemented yet");
...
}
]]]

which changes the generated bindings as follows:
[[[
--- 1.9.x/obj-dir/subversion/bindings/swig/python/svn_ra.c
+++ 1.10.x/obj-dir/subversion/bindings/swig/python/svn_ra.c
@@ -7182,10 +7184,8 @@ SWIGINTERN PyObject *_wrap_svn_ra_change
     }
   }
   {
- arg4 = (svn_string_t **)svn_swig_py_must_get_ptr(obj3, SWIGTYPE_p_p_svn_string_t, svn_argnum_obj3);
- if (PyErr_Occurred()) {
- SWIG_fail;
- }
+ SWIG_exception(SWIG_ValueError, "svn_ra_change_rev_prop2 is not implemented yet");
+
   }
   {
     if (obj4 == Py_None)
]]]

In both cases the generated code goes on like this:
[[[
...
    result = (svn_error_t *)svn_fs_change_rev_prop2(arg1,arg2,(char const *)arg3,(struct svn_string_t const *const *)arg4,(struct svn_string_t const *)arg5,arg6);
...
    if (*arg4 == NULL) {
      Py_INCREF(Py_None);
      s = Py_None;
    }
    else {
      s = PyString_FromStringAndSize((*arg4)->data, (*arg4)->len);
      if (s == NULL)
      SWIG_fail;
    }
    resultobj = SWIG_Python_AppendOutput(resultobj, s);
...
]]]

which is treating the parameter as if it were an output parameter as most (TYPE **) parameters are, and assumes it is non-null, but this one is an input parameter (and may be null).

Can anyone help me work out the correct type-map(s) for it?

-- 
- Julian
Received on 2018-10-26 10:26:46 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.