Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3.8] bpo-16575: Disabled checks for union types being passed by value. (GH-17960) #17964

Merged
merged 1 commit into from
Jan 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Lib/ctypes/test/test_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -571,6 +571,7 @@ class U(Union):
self.assertEqual(f2, [0x4567, 0x0123, 0xcdef, 0x89ab,
0x3210, 0x7654, 0xba98, 0xfedc])

@unittest.skipIf(True, 'Test disabled for now - see bpo-16575/bpo-16576')
def test_union_by_value(self):
# See bpo-16575

Expand Down Expand Up @@ -651,7 +652,7 @@ class Test5(Structure):
self.assertEqual(test5.nested.an_int, 0)
self.assertEqual(test5.another_int, 0)

#@unittest.skipIf('s390' in MACHINE, 'Test causes segfault on S390')
@unittest.skipIf(True, 'Test disabled for now - see bpo-16575/bpo-16576')
def test_bitfield_by_value(self):
# See bpo-16576

Expand Down
18 changes: 18 additions & 0 deletions Modules/_ctypes/_ctypes.c
Original file line number Diff line number Diff line change
Expand Up @@ -2401,6 +2401,23 @@ converters_from_argtypes(PyObject *ob)
for (i = 0; i < nArgs; ++i) {
PyObject *cnv;
PyObject *tp = PyTuple_GET_ITEM(ob, i);
/*
* The following checks, relating to bpo-16575 and bpo-16576, have been
* disabled. The reason is that, although there is a definite problem with
* how libffi handles unions (https://github.com/libffi/libffi/issues/33),
* there are numerous libraries which pass structures containing unions
* by values - especially on Windows but examples also exist on Linux
* (https://bugs.python.org/msg359834).
*
* It may not be possible to get proper support for unions and bitfields
* until support is forthcoming in libffi, but for now, adding the checks
* has caused problems in otherwise-working software, which suggests it
* is better to disable the checks.
*
* Although specific examples reported relate specifically to unions and
* not bitfields, the bitfields check is also being disabled as a
* precaution.

StgDictObject *stgdict = PyType_stgdict(tp);

if (stgdict != NULL) {
Expand Down Expand Up @@ -2428,6 +2445,7 @@ converters_from_argtypes(PyObject *ob)
return NULL;
}
}
*/

if (_PyObject_LookupAttrId(tp, &PyId_from_param, &cnv) <= 0) {
Py_DECREF(converters);
Expand Down