The new {b,l}p_{u,}longlong() didn't check get_pylong()'s return for NULL.
Repaired that, and added appropriate tests for it to test_struct.py.
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 @@
                     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 @@
 {
 	int res;
 	v = get_pylong(v);
+	if (v == NULL)
+		return -1;
 	res = _PyLong_AsByteArray((PyLongObject *)v,
 			   	  (unsigned char *)p,
 				  8,
@@ -888,6 +890,8 @@
 {
 	int res;
 	v = get_pylong(v);
+	if (v == NULL)
+		return -1;
 	res = _PyLong_AsByteArray((PyLongObject *)v,
 			   	  (unsigned char *)p,
 				  8,
@@ -1036,6 +1040,8 @@
 {
 	int res;
 	v = get_pylong(v);
+	if (v == NULL)
+		return -1;
 	res = _PyLong_AsByteArray((PyLongObject*)v,
 			   	  (unsigned char *)p,
 				  8,
@@ -1050,6 +1056,8 @@
 {
 	int res;
 	v = get_pylong(v);
+	if (v == NULL)
+		return -1;
 	res = _PyLong_AsByteArray((PyLongObject*)v,
 			   	  (unsigned char *)p,
 				  8,