summaryrefslogtreecommitdiff
path: root/dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch
blob: 17bad96d6278f128e4150338e6ba7a2e5c78132f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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,):