| |
@@ -0,0 +1,75 @@
|
| |
+ From 9dbf5d3bc2033940cdca35440cf08814544f81e4 Mon Sep 17 00:00:00 2001
|
| |
+ From: Vinay Sajip <vinay_sajip@yahoo.co.uk>
|
| |
+ Date: Sun, 12 Jan 2020 20:55:54 +0000
|
| |
+ Subject: [PATCH] [3.7] bpo-16575: Disabled checks for union types being passed
|
| |
+ by value. (GH-17960) (GH-17970)
|
| |
+
|
| |
+ 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.
|
| |
+ (cherry picked from commit c12440c371025bea9c3bfb94945f006c486c2c01)
|
| |
+ ---
|
| |
+ Lib/ctypes/test/test_structures.py | 3 ++-
|
| |
+ Modules/_ctypes/_ctypes.c | 19 +++++++++++++++++++
|
| |
+ 2 files changed, 21 insertions(+), 1 deletion(-)
|
| |
+
|
| |
+ diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
|
| |
+ index c129377041f03..2eb057a9f3009 100644
|
| |
+ --- a/Lib/ctypes/test/test_structures.py
|
| |
+ +++ b/Lib/ctypes/test/test_structures.py
|
| |
+ @@ -532,6 +532,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
|
| |
+
|
| |
+ @@ -612,7 +613,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
|
| |
+
|
| |
+ diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
|
| |
+ index c8fed44599543..dd0c61fd8a9a9 100644
|
| |
+ --- a/Modules/_ctypes/_ctypes.c
|
| |
+ +++ b/Modules/_ctypes/_ctypes.c
|
| |
+ @@ -2277,6 +2277,23 @@ converters_from_argtypes(PyObject *ob)
|
| |
+ for (i = 0; i < nArgs; ++i) {
|
| |
+ PyObject *tp = PyTuple_GET_ITEM(ob, i);
|
| |
+ PyObject *cnv;
|
| |
+ +/*
|
| |
+ + * 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) {
|
| |
+ @@ -2304,6 +2321,8 @@ converters_from_argtypes(PyObject *ob)
|
| |
+ return NULL;
|
| |
+ }
|
| |
+ }
|
| |
+ + */
|
| |
+ +
|
| |
+ cnv = PyObject_GetAttrString(tp, "from_param");
|
| |
+ if (!cnv)
|
| |
+ goto argtypes_error_1;
|
| |
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1794572
Fixed upstream: https://bugs.python.org/issue16575