Yasuhito FUTATSUKI wrote on Sat, 14 Dec 2019 04:19 +00:00:
> Though this issue was already resolved...
>
> On 2019/12/13 17:28, Yasuhito FUTATSUKI wrote:
> > On 2019/12/13 16:24, Daniel Shahaf wrote:
> >> Thanks for the quick fix. However, it doesn't work on my machine (Debian stretch).
> >>
> >> With your latest patch, «svn_config_get_user_config_path(None, None)»
> >> calls the C function of the name with «path == NULL» and segfaults immediately,
> >> because the parameter is dereferenced on the first line of the function. As to
> >> the other case, I get a bogus stack trace:
> >>
> >> [[[
> >> % PYTHONPATH=… lldb -- python3 -c $'from svn.core import *; svn_config_ensure("/tmp/foo")'
> >> (lldb) r
> >> Process 19706 launched: '/usr/bin/python3' (x86_64)
> >> Process 19706 stopped
> >> * thread #1, name = 'python3', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
> >> frame #0: 0x0000000000000000
> >> error: memory read failed for 0x0
> >> (lldb)
> >> ]]]
> >
> > Thank you for testing. I also tested and same result on FreeBSD
> > with Python 3.6. It seems "z*" format in PyArg_ParseTuple() doesn't
> > work I expected.
>
> That was my misreading of the spec[1][2]. The argment type for "z*"
> should be Py_buffer, not const char *. Similarly, "z#" can convert
> str(unicode), bytes, None into "const char *" and int, but it is not
> what we want here. Anyway we had to write additional code if we want to
> use parse=... feature of SWIG typemap here.
>
> https://docs.python.org/2.7/c-api/arg.html
> https://docs.python.org/3/c-api/arg.html
Thanks for following up; I looked up the same page yesterday but
overlooked the C types corresponding to each format code.
Cheers,
Daniel
Received on 2019-12-14 12:11:48 CET