From: Mark Dickinson Date: Sun, 18 Jul 2010 07:55:55 +0000 (+0000) Subject: Merged revisions 82941,82943 via svnmerge from X-Git-Tag: v2.7.1rc1~587 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cac0b83b3583986eae4b84299e023af32e719b95;p=python Merged revisions 82941,82943 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r82941 | mark.dickinson | 2010-07-18 08:29:02 +0100 (Sun, 18 Jul 2010) | 3 lines Issue #9277: Struct module: standard bool packing was incorrect if char is unsigned. Thanks Stefan Krah for the patch. ........ r82943 | mark.dickinson | 2010-07-18 08:48:20 +0100 (Sun, 18 Jul 2010) | 1 line Misc/NEWS entry for r82941. ........ --- diff --git a/Misc/NEWS b/Misc/NEWS index 819a401172..ec857acde1 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -44,6 +44,11 @@ Library Extension Modules ----------------- +- Issue #9277: Fix bug in struct.pack for bools in standard mode + (e.g., struct.pack('>?')): if conversion to bool raised an exception + then that exception wasn't properly propagated on machines where + char is unsigned. + Build ----- diff --git a/Modules/_struct.c b/Modules/_struct.c index 52c5eeb170..f22c31cd2a 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -912,11 +912,11 @@ bp_double(char *p, PyObject *v, const formatdef *f) static int bp_bool(char *p, PyObject *v, const formatdef *f) { - char y; + int y; y = PyObject_IsTrue(v); if (y < 0) return -1; - memcpy(p, (char *)&y, sizeof y); + *p = (char)y; return 0; }