From b00c7c2d1d905eb63c81a0917f1a94b763a7843b Mon Sep 17 00:00:00 2001 From: Ivan Babrou Date: Fri, 26 Feb 2021 21:03:53 -0800 Subject: [PATCH] python37, python2: remove win64 workaround to fix aarch64-darwin The issue manifests itself as the following on `aarch64-darwin`: ``` >>> import ctypes Traceback (most recent call last): File "", line 1, in File "/nix/store/i8cq0xrjirz1rcp65wzcyhj6ypzlw9il-python3-3.7.10/lib/python3.7/ctypes/__init__.py", line 551, in _reset_cache() File "/nix/store/i8cq0xrjirz1rcp65wzcyhj6ypzlw9il-python3-3.7.10/lib/python3.7/ctypes/__init__.py", line 273, in _reset_cache CFUNCTYPE(c_int)(lambda: None) MemoryError ``` The commit we backport is included in Python 3.8, and it reverts the change that was introduced all the way back in Python 2.7. --- .../python/cpython/2.7/default.nix | 6 +++ .../cpython/3.7/no-win64-workaround.patch | 37 +++++++++++++++++++ .../interpreters/python/cpython/default.nix | 5 +++ 3 files changed, 48 insertions(+) create mode 100644 pkgs/development/interpreters/python/cpython/3.7/no-win64-workaround.patch diff --git a/pkgs/development/interpreters/python/cpython/2.7/default.nix b/pkgs/development/interpreters/python/cpython/2.7/default.nix index 37d43e33d8e..adeafa80e6c 100644 --- a/pkgs/development/interpreters/python/cpython/2.7/default.nix +++ b/pkgs/development/interpreters/python/cpython/2.7/default.nix @@ -106,6 +106,12 @@ let ./CVE-2021-3177.patch + # The workaround is for unittests on Win64, which we don't support. + # It does break aarch64-darwin, which we do support. See: + # * https://bugs.python.org/issue35523 + # * https://github.com/python/cpython/commit/e6b247c8e524 + ../3.7/no-win64-workaround.patch + ] ++ optionals (x11Support && stdenv.isDarwin) [ ./use-correct-tcl-tk-on-darwin.patch ] ++ optionals stdenv.isLinux [ diff --git a/pkgs/development/interpreters/python/cpython/3.7/no-win64-workaround.patch b/pkgs/development/interpreters/python/cpython/3.7/no-win64-workaround.patch new file mode 100644 index 00000000000..685b1e83944 --- /dev/null +++ b/pkgs/development/interpreters/python/cpython/3.7/no-win64-workaround.patch @@ -0,0 +1,37 @@ +From e6b247c8e524dbe5fc03b3492f628d0d5348bc49 Mon Sep 17 00:00:00 2001 +From: Victor Stinner +Date: Tue, 18 Dec 2018 14:47:21 +0100 +Subject: [PATCH] bpo-35523: Remove ctypes callback workaround (GH-11211) + +Remove ctypes callback workaround: no longer create a callback at startup. +Avoid SELinux alert on "import ctypes" and "import uuid". +--- + Lib/ctypes/__init__.py | 5 ----- + .../next/Library/2018-12-18-13-52-13.bpo-35523.SkoMno.rst | 2 ++ + 2 files changed, 2 insertions(+), 5 deletions(-) + create mode 100644 Misc/NEWS.d/next/Library/2018-12-18-13-52-13.bpo-35523.SkoMno.rst + +diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py +index 6146773988648..5f78beda5866e 100644 +--- a/Lib/ctypes/__init__.py ++++ b/Lib/ctypes/__init__.py +@@ -266,11 +266,6 @@ def _reset_cache(): + # _SimpleCData.c_char_p_from_param + POINTER(c_char).from_param = c_char_p.from_param + _pointer_type_cache[None] = c_void_p +- # XXX for whatever reasons, creating the first instance of a callback +- # function is needed for the unittests on Win64 to succeed. This MAY +- # be a compiler bug, since the problem occurs only when _ctypes is +- # compiled with the MS SDK compiler. Or an uninitialized variable? +- CFUNCTYPE(c_int)(lambda: None) + + def create_unicode_buffer(init, size=None): + """create_unicode_buffer(aString) -> character array +diff --git a/Misc/NEWS.d/next/Library/2018-12-18-13-52-13.bpo-35523.SkoMno.rst b/Misc/NEWS.d/next/Library/2018-12-18-13-52-13.bpo-35523.SkoMno.rst +new file mode 100644 +index 0000000000000..94a9fd257383e +--- /dev/null ++++ b/Misc/NEWS.d/next/Library/2018-12-18-13-52-13.bpo-35523.SkoMno.rst +@@ -0,0 +1,2 @@ ++Remove :mod:`ctypes` callback workaround: no longer create a callback at ++startup. Avoid SELinux alert on ``import ctypes`` and ``import uuid``. diff --git a/pkgs/development/interpreters/python/cpython/default.nix b/pkgs/development/interpreters/python/cpython/default.nix index 1ae8d19ac58..fdf022213c5 100644 --- a/pkgs/development/interpreters/python/cpython/default.nix +++ b/pkgs/development/interpreters/python/cpython/default.nix @@ -185,6 +185,11 @@ in with passthru; stdenv.mkDerivation { # Backport a fix for discovering `rpmbuild` command when doing `python setup.py bdist_rpm` to 3.5, 3.6, 3.7. # See: https://bugs.python.org/issue11122 ./3.7/fix-hardcoded-path-checking-for-rpmbuild.patch + # The workaround is for unittests on Win64, which we don't support. + # It does break aarch64-darwin, which we do support. See: + # * https://bugs.python.org/issue35523 + # * https://github.com/python/cpython/commit/e6b247c8e524 + ./3.7/no-win64-workaround.patch ] ++ optionals (isPy37 || isPy38 || isPy39) [ # Fix darwin build https://bugs.python.org/issue34027 ./3.7/darwin-libutil.patch