Index: Modules/structmodule.c =================================================================== --- Modules/structmodule.c (Revision 42524) +++ Modules/structmodule.c (Arbeitskopie) @@ -120,16 +120,22 @@ static int get_ulong(PyObject *v, unsigned long *p) { + int result; if (PyLong_Check(v)) { unsigned long x = PyLong_AsUnsignedLong(v); if (x == (unsigned long)(-1) && PyErr_Occurred()) return -1; *p = x; return 0; + } else { + result = get_long(v, (long *)p); + if ((result == 0) && ((long)*p < 0)) { + PyErr_SetString(StructError, + "unsigned long argument must be positive"); + return -1; + } + return result; } - else { - return get_long(v, (long *)p); - } } #ifdef HAVE_LONG_LONG