bpo-16575: Disabled checks for union types being passed by value. (GH-17960)
Although the underlying libffi issue remains open, adding these checks have caused problems in third-party projects which are in widespread use. See the issue for examples. The corresponding tests have also been skipped.
This commit is contained in:
parent
100fafcf20
commit
c12440c371
|
@ -576,6 +576,7 @@ class StructureTestCase(unittest.TestCase):
|
||||||
self.assertEqual(f2, [0x4567, 0x0123, 0xcdef, 0x89ab,
|
self.assertEqual(f2, [0x4567, 0x0123, 0xcdef, 0x89ab,
|
||||||
0x3210, 0x7654, 0xba98, 0xfedc])
|
0x3210, 0x7654, 0xba98, 0xfedc])
|
||||||
|
|
||||||
|
@unittest.skipIf(True, 'Test disabled for now - see bpo-16575/bpo-16576')
|
||||||
def test_union_by_value(self):
|
def test_union_by_value(self):
|
||||||
# See bpo-16575
|
# See bpo-16575
|
||||||
|
|
||||||
|
@ -656,7 +657,7 @@ class StructureTestCase(unittest.TestCase):
|
||||||
self.assertEqual(test5.nested.an_int, 0)
|
self.assertEqual(test5.nested.an_int, 0)
|
||||||
self.assertEqual(test5.another_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):
|
def test_bitfield_by_value(self):
|
||||||
# See bpo-16576
|
# See bpo-16576
|
||||||
|
|
||||||
|
|
|
@ -2401,6 +2401,23 @@ converters_from_argtypes(PyObject *ob)
|
||||||
for (i = 0; i < nArgs; ++i) {
|
for (i = 0; i < nArgs; ++i) {
|
||||||
PyObject *cnv;
|
PyObject *cnv;
|
||||||
PyObject *tp = PyTuple_GET_ITEM(ob, i);
|
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);
|
StgDictObject *stgdict = PyType_stgdict(tp);
|
||||||
|
|
||||||
if (stgdict != NULL) {
|
if (stgdict != NULL) {
|
||||||
|
@ -2428,6 +2445,7 @@ converters_from_argtypes(PyObject *ob)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
if (_PyObject_LookupAttrId(tp, &PyId_from_param, &cnv) <= 0) {
|
if (_PyObject_LookupAttrId(tp, &PyId_from_param, &cnv) <= 0) {
|
||||||
Py_DECREF(converters);
|
Py_DECREF(converters);
|
||||||
|
|
Loading…
Reference in New Issue