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