#166 Fedora 30: ctypes: Disable checks for union types being passed by value
Merged 4 years ago by zuul. Opened 4 years ago by churchyard.
rpms/ churchyard/python3 f30-00339  into  f30

@@ -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;

file modified
+14 -1
@@ -17,7 +17,7 @@ 

  #global prerel ...

  %global upstream_version %{general_version}%{?prerel}

  Version: %{general_version}%{?prerel:~%{prerel}}

- Release: 1%{?dist}

+ Release: 2%{?dist}

  License: Python

  

  
@@ -299,6 +299,15 @@ 

  # In upstream since 3.8: https://bugs.python.org/issue38347

  Patch335: 00335-backport-pathfix-change.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.,
@@ -594,6 +603,7 @@ 

  %patch274 -p1

  %patch316 -p1

  %patch335 -p1

+ %patch339 -p1

  

  

  # Remove files that should be generated by the build
@@ -1506,6 +1516,9 @@ 

  # ======================================================

  

  %changelog

+ * Tue Jan 28 2020 Miro Hrončok <mhroncok@redhat.com> - 3.7.6-2

+ - ctypes: Disable checks for union types being passed by value (#1794572)

+ 

  * Thu Dec 19 2019 Miro Hrončok <mhroncok@redhat.com> - 3.7.6-1

  - Update to 3.7.6