gh-91353: Fix void return type handling in ctypes (GH-32246) by hoodmane · Pull Request #32246 · python/cpython (original) (raw)
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is better? I ran into a similar issue when writing the libffi
port: _ctypes_get_ffi_type
is used for the arguments. Return types need a little bit of special handling, like for instance it doesn't make sense to have an argument of type ffi_type_void
. I would argue that it would be safest to do something like:
if (obj == Py_None) // Set an error, arguments can't have type None!
but I'm not that familiar with the ctypes interface -- are we supposed to use None
if we are not sure about the argument's type? Similarly,
if (obj == NULL)
return &ffi_type_sint;
looks kind of scary to me. Why did we pass in NULL
to this function? If this function set exceptions in these weird cases and they were handled as appropriate at the call site, the bug I'm fixing here probably wouldn't have happened in the first place.