commit:     7336b4f587b29d26018d925ed58f5aef503af218
Author:     Rolf Eike Beer <eike <AT> sf-mail <DOT> de>
AuthorDate: Fri Sep  3 13:15:19 2021 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Sep  3 18:18:16 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7336b4f5

dev-python/cython: fix unaligned accesses in type conversions

Signed-off-by: Rolf Eike Beer <eike <AT> sf-mail.de>
Closes: https://github.com/gentoo/gentoo/pull/22204
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 ...hon-0.29.24.ebuild => cython-0.29.24-r1.ebuild} |  1 +
 .../files/cython-0.29.24-unaligned-format.patch    | 33 ++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/dev-python/cython/cython-0.29.24.ebuild 
b/dev-python/cython/cython-0.29.24-r1.ebuild
similarity index 97%
rename from dev-python/cython/cython-0.29.24.ebuild
rename to dev-python/cython/cython-0.29.24-r1.ebuild
index 0c107a31d2b..dced6974732 100644
--- a/dev-python/cython/cython-0.29.24.ebuild
+++ b/dev-python/cython/cython-0.29.24-r1.ebuild
@@ -31,6 +31,7 @@ BDEPEND="${RDEPEND}
 PATCHES=(
        "${FILESDIR}/${PN}-0.29.22-spawn-multiprocessing.patch"
        "${FILESDIR}/${PN}-0.29.23-test_exceptions-py310.patch"
+       "${FILESDIR}/${PN}-0.29.24-unaligned-format.patch"
 )
 
 SITEFILE=50cython-gentoo.el

diff --git a/dev-python/cython/files/cython-0.29.24-unaligned-format.patch 
b/dev-python/cython/files/cython-0.29.24-unaligned-format.patch
new file mode 100644
index 00000000000..955c32debb4
--- /dev/null
+++ b/dev-python/cython/files/cython-0.29.24-unaligned-format.patch
@@ -0,0 +1,33 @@
+From 2c08fd50d62e4255602ee3c0d41157df7608e773 Mon Sep 17 00:00:00 2001
+From: Stefan Behnel <[email protected]>
+Date: Wed, 1 Sep 2021 00:09:02 +0200
+Subject: [PATCH] Avoid copying unaligned 16-bit values since some platforms
+ require them to be aligned. Use memcpy() instead to let the C compiler decide
+ how to do it.
+
+Closes https://github.com/cython/cython/issues/4343
+---
+ Cython/Utility/TypeConversion.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Cython/Utility/TypeConversion.c b/Cython/Utility/TypeConversion.c
+index 751d12b62a..3669bc9ec1 100644
+--- a/Cython/Utility/TypeConversion.c
++++ b/Cython/Utility/TypeConversion.c
+@@ -829,14 +829,14 @@ static CYTHON_INLINE PyObject* 
{{TO_PY_FUNCTION}}({{TYPE}} value, Py_ssize_t wid
+             digit_pos = abs((int)(remaining % (8*8)));
+             remaining = ({{TYPE}}) (remaining / (8*8));
+             dpos -= 2;
+-            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_8)[digit_pos]; 
/* copy 2 digits at a time */
++            memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2); /* copy 2 digits 
at a time, unaligned */
+             last_one_off = (digit_pos < 8);
+             break;
+         case 'd':
+             digit_pos = abs((int)(remaining % (10*10)));
+             remaining = ({{TYPE}}) (remaining / (10*10));
+             dpos -= 2;
+-            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_10)[digit_pos]; 
/* copy 2 digits at a time */
++            memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2); /* copy 2 digits 
at a time, unaligned */
+             last_one_off = (digit_pos < 10);
+             break;
+         case 'x':

Reply via email to