From acf2f5823195ea388577a3e3b01db5dcef866fc5 Mon Sep 17 00:00:00 2001 From: Miro Hrončok Date: Jan 30 2020 16:50:10 +0000 Subject: ctypes: Disable checks for union types being passed by value Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1794572 Fixed upstream: https://bugs.python.org/issue16575 --- diff --git a/00339-bpo-16575.patch b/00339-bpo-16575.patch new file mode 100644 index 0000000..fd5f794 --- /dev/null +++ b/00339-bpo-16575.patch @@ -0,0 +1,79 @@ +From 812479ed6c2c7854f5fafb2366d005845bfff67a Mon Sep 17 00:00:00 2001 +From: "Miss Islington (bot)" + <31488909+miss-islington@users.noreply.github.com> +Date: Sun, 12 Jan 2020 03:41:07 -0800 +Subject: [PATCH] 00339: bpo-16575: Disabled checks for union types being + passed by value + +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 | 18 ++++++++++++++++++ + 2 files changed, 20 insertions(+), 1 deletion(-) + +diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py +index 19c4430bea..cdbaa7fbd6 100644 +--- a/Lib/ctypes/test/test_structures.py ++++ b/Lib/ctypes/test/test_structures.py +@@ -571,6 +571,7 @@ class StructureTestCase(unittest.TestCase): + 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 + +@@ -651,7 +652,7 @@ class StructureTestCase(unittest.TestCase): + 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 347a3656b6..b51fcde364 100644 +--- a/Modules/_ctypes/_ctypes.c ++++ b/Modules/_ctypes/_ctypes.c +@@ -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) { +@@ -2428,6 +2445,7 @@ converters_from_argtypes(PyObject *ob) + return NULL; + } + } ++ */ + + if (_PyObject_LookupAttrId(tp, &PyId_from_param, &cnv) <= 0) { + Py_DECREF(converters); +-- +2.24.1 + diff --git a/python3.spec b/python3.spec index 9921903..25dbec3 100644 --- a/python3.spec +++ b/python3.spec @@ -278,6 +278,15 @@ Patch274: 00274-fix-arch-names.patch # Ideally, we should talk to upstream and explain why we don't want this Patch328: 00328-pyc-timestamp-invalidation-mode.patch +# 00339 # +# Disabled checks for union types being passed by value +# 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. +# Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1794572 +# Fixed upstream: https://bugs.python.org/issue16575 +Patch339: 00339-bpo-16575.patch + # (New patches go here ^^^) # # When adding new patches to "python" and "python3" in Fedora, EL, etc., @@ -625,6 +634,7 @@ rm Lib/ensurepip/_bundled/*.whl %patch251 -p1 %patch274 -p1 %patch328 -p1 +%patch339 -p1 # Remove files that should be generated by the build @@ -1569,8 +1579,9 @@ CheckPython optimized # ====================================================== %changelog -* Thu Jan 30 2020 Fedora Release Engineering - 3.8.1-2 +* Thu Jan 30 2020 Miro Hrončok - 3.8.1-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild +- ctypes: Disable checks for union types being passed by value (#1794572) * Thu Dec 19 2019 Miro Hrončok - 3.8.1-1 - Update to Python 3.8.1