From cac0b83b3583986eae4b84299e023af32e719b95 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 18 Jul 2010 07:55:55 +0000 Subject: [PATCH] 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. ........ --- Misc/NEWS | 5 +++++ Modules/_struct.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) 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; } -- 2.50.1