check for embedded \0 in strings for z and s formats
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 9f7a5b5..352a5fb 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -206,6 +206,10 @@
 			*q = getstringsize(arg);
 			format++;
 		}
+		else if (strlen(*p) != getstringsize(arg)) {
+			err_setstr(ValueError, "embedded '\\0' in string arg");
+			return 0;
+		}
 		break;
 		}
 	
@@ -225,6 +229,10 @@
 				*q = getstringsize(arg);
 			format++;
 		}
+		else if (*p != NULL && strlen(*p) != getstringsize(arg)) {
+			err_setstr(ValueError, "embedded '\\0' in string arg");
+			return 0;
+		}
 		break;
 		}
 	
@@ -292,8 +300,11 @@
 	va_end(va);
 	if (!ok) {
 		char buf[256];
-		sprintf(buf, "bad argument list (format '%s')", format);
-		err_setstr(TypeError, buf);
+		if (!err_occurred()) {
+			sprintf(buf, "bad argument list (format '%s')",
+				format);
+			err_setstr(TypeError, buf);
+		}
 	}
 	return ok;
 }