Josh Rosenberg <shadowranger+pyt...@gmail.com> added the comment:

The TypeError on Py3 would be because functions taking c_char_p need bytes-like 
objects, not str, on Python 3. '%s' % directory is pointless when directory is 
a str; instead you need to encode it to a bytes-like object, e.g. 
opendir(os.fsencode(directory)) (os.fsencode is Python 3 specific; plain str 
works fine on Py 2).

Your segfault isn't occurring when you load dirfd, it occurs when you call it 
on the result of opendir, when opendir returned NULL on failure (due to the 
non-existent directory you call it with). You didn't check the return value, 
and end up doing flagrantly illegal things with it.

In neither case is this a bug in Python; ctypes lets you do evil things that 
break the rules, and if you break the rules the wrong way, segfaults are to be 
expected. Fix your argument types (for Py3), check your return values (for Py2).

----------
nosy: +josh.r
resolution:  -> not a bug
stage:  -> resolved
status: open -> closed

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35180>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to