summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_struct.py6
-rw-r--r--Modules/structmodule.c8
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,