diff options
-rw-r--r-- | Lib/test/test_struct.py | 6 | ||||
-rw-r--r-- | Modules/structmodule.c | 8 |
2 files changed, 14 insertions, 0 deletions
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py index e6c8bb2..31f4dd7 100644 --- a/Lib/test/test_struct.py +++ b/Lib/test/test_struct.py @@ -314,4 +314,10 @@ def test_std_qQ(): pass test_one_qQ(x) + # Some error cases. + for direction in "<>": + for letter in "qQ": + for badobject in "a string", 3+42j, randrange: + any_err(struct.pack, direction + letter, badobject) + test_std_qQ() diff --git a/Modules/structmodule.c b/Modules/structmodule.c index 4a8886f..66b3ac3 100644 --- a/Modules/structmodule.c +++ b/Modules/structmodule.c @@ -874,6 +874,8 @@ bp_longlong(char *p, PyObject *v, const formatdef *f) { int res; v = get_pylong(v); + if (v == NULL) + return -1; res = _PyLong_AsByteArray((PyLongObject *)v, (unsigned char *)p, 8, @@ -888,6 +890,8 @@ bp_ulonglong(char *p, PyObject *v, const formatdef *f) { int res; v = get_pylong(v); + if (v == NULL) + return -1; res = _PyLong_AsByteArray((PyLongObject *)v, (unsigned char *)p, 8, @@ -1036,6 +1040,8 @@ lp_longlong(char *p, PyObject *v, const formatdef *f) { int res; v = get_pylong(v); + if (v == NULL) + return -1; res = _PyLong_AsByteArray((PyLongObject*)v, (unsigned char *)p, 8, @@ -1050,6 +1056,8 @@ lp_ulonglong(char *p, PyObject *v, const formatdef *f) { int res; v = get_pylong(v); + if (v == NULL) + return -1; res = _PyLong_AsByteArray((PyLongObject*)v, (unsigned char *)p, 8, |