This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author hydroflask
Recipients hydroflask
Date 2022-02-09.22:05:39
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1644444340.15.0.469712253239.issue46697@roundup.psfhosted.org>
In-reply-to
Content
`_ctypes_simple_instance` in _ctypes.c returns the opposite logic of what its documentation claims. It is supposed to return true when the argument (a type object) is a direct subclass of `Simple_Type` (`_SimpleCData` in Python code). However it returns false instead.

No bugs have manifested from this because all of the call sites ( `callproc.c::GetResult`, `callbacks.c::_CallPythonObject`,_`ctypes.c::PyCData_get`, `_ctypes.c::Simple_from_outparm`) invert the return value of this function. The last example, `ctypes.c::Simple_from_outparm` only calls `Simple_get_value()` when `_ctypes_simple_instance` returns false, which makes sense because otherwise the invocation of `_ctypes.c::Simple_from_outparm()` could trigger an assertion error.

This is not just simply an issue of inverted logic because the logic isn't inverted in all cases. In `_ctypes_simple_instance` in the case when `PyCSimpleTypeObject_Check(type)` returns false, if this were supposed to be perfect inverted logic then the whole routine would return 1 (True) not 0. Fortunately, due to the way the code is structured, I don't think there is a case when `PyCSimpleTypeObject_Check(type)` returns false so the incorrect case where it returns a constant 0 is effectively dead code.

I have compiled a version of Python with the attached patch and run "make test" with no issues.
History
Date User Action Args
2022-02-09 22:05:40hydroflasksetrecipients: + hydroflask
2022-02-09 22:05:40hydroflasksetmessageid: <1644444340.15.0.469712253239.issue46697@roundup.psfhosted.org>
2022-02-09 22:05:40hydroflasklinkissue46697 messages
2022-02-09 22:05:40hydroflaskcreate