Merged revisions 82945 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/release27-maint

................
  r82945 | mark.dickinson | 2010-07-18 08:55:55 +0100 (Sun, 18 Jul 2010) | 14 lines

  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 0688d0b..c324df3 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -302,6 +302,11 @@
 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.
+
 - Issue #7384: If the system readline library is linked against
   ncurses, do not link the readline module against ncursesw. The
   additional restriction of linking the readline and curses modules
diff --git a/Modules/_struct.c b/Modules/_struct.c
index b997d51..936e8af 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -1013,9 +1013,9 @@
 static int
 bp_bool(char *p, PyObject *v, const formatdef *f)
 {
-    char y;
+    int y;
     y = PyObject_IsTrue(v);
-    memcpy(p, (char *)&y, sizeof y);
+    *p = (char)y;
     return 0;
 }