Skip to content

Commit

Permalink
More work on py_ssize_t_clean support.
Browse files Browse the repository at this point in the history
  • Loading branch information
jd-boyd committed Nov 1, 2019
1 parent 5244098 commit e63333e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 8 deletions.
19 changes: 14 additions & 5 deletions lzomodule.c
Expand Up @@ -85,7 +85,6 @@ 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;
Expand All @@ -98,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;

Expand Down Expand Up @@ -192,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;
Expand Down Expand Up @@ -277,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;
Expand Down Expand Up @@ -359,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);
Expand Down Expand Up @@ -395,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);
Expand Down
11 changes: 9 additions & 2 deletions tests/test.py
Expand Up @@ -96,10 +96,13 @@ 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


Expand All @@ -114,3 +117,7 @@ def test_lzo_big():

def test_lzo_raw_big():
gen_raw(b" " * 131072)


def test_lzo_compress_extremely_big():
b = lzo.compress(bytes(bytearray((1024**3)*2)))
2 changes: 1 addition & 1 deletion tox.ini
@@ -1,6 +1,6 @@
# content of: tox.ini , put in same dir as setup.py
[tox]
envlist = py27,py35
envlist = py27,py37
[testenv]
deps=
nose
Expand Down

0 comments on commit e63333e

Please sign in to comment.