[Buildroot] [PATCH 1/2] package/python3: uClibc-ng doesn't set errno when encryption method is not available

Romain Naour romain.naour at gmail.com
Wed Nov 11 23:34:28 UTC 2020


Since commit [1] in cpython, an exception is raised when an encryption method
is not available. This eception is handled only if errno is set to EINVAL by
crypt() but uClibc-ng doesn't set errno in crypt() [2].

Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/830981961
https://gitlab.com/buildroot.org/buildroot/-/jobs/830981979

[1] https://github.com/python/cpython/commit/0d3fe8ae4961bf551e7d5e42559e2ede1a08fd7c
[2] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libcrypt/crypt.c?h=v1.0.36#n29

Signed-off-by: Romain Naour <romain.naour at gmail.com>
---
 ...-ng-doesn-t-set-errno-when-encryptio.patch | 40 +++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 package/python3/0034-lib-crypt-uClibc-ng-doesn-t-set-errno-when-encryptio.patch

diff --git a/package/python3/0034-lib-crypt-uClibc-ng-doesn-t-set-errno-when-encryptio.patch b/package/python3/0034-lib-crypt-uClibc-ng-doesn-t-set-errno-when-encryptio.patch
new file mode 100644
index 0000000000..880277eb1d
--- /dev/null
+++ b/package/python3/0034-lib-crypt-uClibc-ng-doesn-t-set-errno-when-encryptio.patch
@@ -0,0 +1,40 @@
+From 3c83eedcc2df3ecf6c4a17953ca24dff60c1378e Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour at gmail.com>
+Date: Thu, 12 Nov 2020 00:16:18 +0100
+Subject: [PATCH] lib/crypt: uClibc-ng doesn't set errno when encryption method
+ is not available
+
+Since commit [1] in cpython, an exception is raised when an encryption method
+is not available. This eception is handled only if errno is set to EINVAL by
+crypt() but uClibc-ng doesn't set errno in crypt() [2].
+
+Fixes:
+https://gitlab.com/buildroot.org/buildroot/-/jobs/830981961
+https://gitlab.com/buildroot.org/buildroot/-/jobs/830981979
+
+[1] https://github.com/python/cpython/commit/0d3fe8ae4961bf551e7d5e42559e2ede1a08fd7c
+[2] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libcrypt/crypt.c?h=v1.0.36#n29
+
+Signed-off-by: Romain Naour <romain.naour at gmail.com>
+---
+ Lib/crypt.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/crypt.py b/Lib/crypt.py
+index 33dbc46bb3..4692a5270c 100644
+--- a/Lib/crypt.py
++++ b/Lib/crypt.py
+@@ -94,7 +94,9 @@ def _add_method(name, *args, rounds=None):
+         result = crypt('', salt)
+     except OSError as e:
+         # Not all libc libraries support all encryption methods.
+-        if e.errno == errno.EINVAL:
++        # Not all libc libraries set errno when encryption method is not
++        # available.
++        if e.errno == errno.EINVAL or e.errno == 0:
+             return False
+         raise
+     if result and len(result) == method.total_size:
+-- 
+2.25.4
+
-- 
2.25.4



More information about the buildroot mailing list