summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Sautier <sbraz@gentoo.org>2021-08-08 11:27:58 +0200
committerLouis Sautier <sbraz@gentoo.org>2021-08-08 11:29:31 +0200
commit779862562a0dcca72fa43063aae0a6435fb81f6c (patch)
treeacc05d85bbb099b492074fcde3b3dfe0171b91da
parentdev-python/python-xlib: Remove old (diff)
downloadgentoo-77986256.tar.gz
gentoo-77986256.tar.bz2
gentoo-77986256.zip
dev-python/python-lzo: enable py3.10, update EAPI 7 -> 8
Signed-off-by: Louis Sautier <sbraz@gentoo.org>
-rw-r--r--dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch159
-rw-r--r--dev-python/python-lzo/python-lzo-1.12-r2.ebuild34
2 files changed, 193 insertions, 0 deletions
diff --git a/dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch b/dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch
new file mode 100644
index 000000000000..17bad96d6278
--- /dev/null
+++ b/dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch
@@ -0,0 +1,159 @@
+diff --git a/lzomodule.c b/lzomodule.c
+index b5fa542..e9ca432 100644
+--- a/lzomodule.c
++++ b/lzomodule.c
+@@ -31,6 +31,8 @@
+
+ #define MODULE_VERSION "1.12"
+
++#define PY_SSIZE_T_CLEAN
++
+ #include <Python.h>
+ #include <lzo/lzo1x.h>
+
+@@ -83,7 +85,7 @@ compress(PyObject *dummy, PyObject *args)
+ lzo_uint in_len;
+ lzo_uint out_len;
+ lzo_uint new_len;
+- int len;
++ Py_ssize_t len;
+ int level = 1;
+ int header = 1;
+ int err;
+@@ -95,6 +97,16 @@ compress(PyObject *dummy, PyObject *args)
+ if (len < 0)
+ return NULL;
+
++ if (len > LZO_UINT_MAX) {
++ PyErr_SetString(LzoError, "Input size is larger than LZO_UINT_MAX");
++ return NULL;
++ }
++
++ if ((len + len / 16 + 64 + 3) > LZO_UINT_MAX) {
++ PyErr_SetString(LzoError, "Output size is larger than LZO_UINT_MAX");
++ return NULL;
++ }
++
+ in_len = len;
+ out_len = in_len + in_len / 16 + 64 + 3;
+
+@@ -189,7 +201,7 @@ decompress(PyObject *dummy, PyObject *args)
+ lzo_uint in_len;
+ lzo_uint out_len;
+ lzo_uint new_len;
+- int len;
++ Py_ssize_t len;
+ int buflen = -1;
+ int header = 1;
+ int err;
+@@ -274,7 +286,7 @@ optimize(PyObject *dummy, PyObject *args)
+ lzo_uint in_len;
+ lzo_uint out_len;
+ lzo_uint new_len;
+- int len;
++ Py_ssize_t len;
+ int err;
+ int header = 1;
+ int buflen = -1;
+@@ -356,7 +368,7 @@ static PyObject *
+ adler32(PyObject *dummy, PyObject *args)
+ {
+ char *buf;
+- int len;
++ Py_ssize_t len;
+ unsigned long val = 1; /* == lzo_adler32(0, NULL, 0); */
+
+ UNUSED(dummy);
+@@ -392,7 +404,7 @@ static PyObject *
+ crc32(PyObject *dummy, PyObject *args)
+ {
+ char *buf;
+- int len;
++ Py_ssize_t len;
+ unsigned long val = 0; /* == lzo_crc32(0, NULL, 0); */
+
+ UNUSED(dummy);
+diff --git a/tests/test.py b/tests/test.py
+index 9a96ce7..af761d9 100644
+--- a/tests/test.py
++++ b/tests/test.py
+@@ -96,11 +96,17 @@ def test_version():
+
+ def test_lzo():
+ yield gen, b"aaaaaaaaaaaaaaaaaaaaaaaa"
+- yield gen_raw, b"aaaaaaaaaaaaaaaaaaaaaaaa"
+ yield gen, b"abcabcabcabcabcabcabcabc"
+- yield gen_raw, b"abcabcabcabcabcabcabcabc"
+ yield gen, b"abcabcabcabcabcabcabcabc", 9
++
++
++def test_lzo_raw():
++ yield gen_raw, b"aaaaaaaaaaaaaaaaaaaaaaaa"
++ yield gen_raw, b"abcabcabcabcabcabcabcabc"
+ yield gen_raw, b"abcabcabcabcabcabcabcabc", 9
++
++
++def test_lzo_empty():
+ yield gen, b""
+ yield gen_raw, b""
+
+@@ -113,41 +119,8 @@ def test_lzo_raw_big():
+ gen_raw(b" " * 131072)
+
+
+-def main(args):
+- # display version information and module documentation
+- print("LZO version %s (0x%x), %s" % (lzo.LZO_VERSION_STRING, lzo.LZO_VERSION, lzo.LZO_VERSION_DATE))
+- print(lzo.__file__)
+- print()
+- print(lzo.__doc__)
+-
+- # display additional module information
+- ## print dir(lzo)
+- ## print_modinfo()
+-
+- # compress some simple strings
+- gen(b"aaaaaaaaaaaaaaaaaaaaaaaa")
+- gen_raw(b"aaaaaaaaaaaaaaaaaaaaaaaa")
+- gen(b"abcabcabcabcabcabcabcabc")
+- gen_raw(b"abcabcabcabcabcabcabcabc")
+- gen(b"abcabcabcabcabcabcabcabc", level=9)
+- gen_raw(b"abcabcabcabcabcabcabcabc", level=9)
+- gen(b" " * 131072)
+- gen_raw(b" " * 131072)
+- gen(b"")
+- gen_raw(b"")
+- print("Simple compression test passed.")
+-
+- test_version()
+-
+- # force an exception (because of invalid compressed data)
+- assert issubclass(lzo.error, Exception)
+- try:
+- x = lzo.decompress("xx")
+- except lzo.error:
+- pass
+- else:
+- print("Exception handling does NOT work !")
+- return 0
+-
+-if __name__ == '__main__':
+- sys.exit(main(sys.argv))
++if sys.maxsize > 1<<32:
++ # This test raises OverflowError on 32-bit Pythons. Compressing
++ # this much data requires a 64-bit system.
++ def test_lzo_compress_extremely_big():
++ b = lzo.compress(bytes(bytearray((1024**3)*2)))
+diff --git a/tests/util.py b/tests/util.py
+index 0a2f4ed..c7bd5f0 100644
+--- a/tests/util.py
++++ b/tests/util.py
+@@ -45,7 +45,7 @@ def get_sys_path(p=None):
+ if p: p0 = p[0]
+ #
+ plat = get_platform()
+- plat_specifier = "%s-%s" % (plat, sys.version[:3])
++ plat_specifier = "%s-%d.%d" % (plat, sys.version_info[0], sys.version_info[1])
+ ##print plat, plat_specifier
+ #
+ for prefix in (p0, os.curdir, os.pardir,):
diff --git a/dev-python/python-lzo/python-lzo-1.12-r2.ebuild b/dev-python/python-lzo/python-lzo-1.12-r2.ebuild
new file mode 100644
index 000000000000..f3636cc05cb8
--- /dev/null
+++ b/dev-python/python-lzo/python-lzo-1.12-r2.ebuild
@@ -0,0 +1,34 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_SETUPTOOLS=no
+PYTHON_COMPAT=( python3_{8..10} )
+
+inherit distutils-r1 prefix
+
+DESCRIPTION="Python interface to lzo"
+HOMEPAGE="https://github.com/jd-boyd/python-lzo"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="dev-libs/lzo:2"
+DEPEND="${RDEPEND}"
+
+# We can't use pytest at the moment because the package uses "yield tests"
+# https://docs.pytest.org/en/6.2.x/deprecations.html#yield-tests
+distutils_enable_tests --install nose
+
+PATCHES=(
+ # Upstream commits: 52440984, e63333e5, 15c40595 and 0a4272fc
+ "${FILESDIR}/${P}-fix-py3.10.patch"
+)
+
+python_prepare_all() {
+ hprefixify setup.py
+ distutils-r1_python_prepare_all
+}