Avoid crashing because of an unaligned word access
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 772707d..a4d210b 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6252,7 +6252,15 @@
     end = s + size;
 
     while (s < end) {
-        Py_UCS4 ch = *(Py_UNICODE*)s;
+        Py_UCS4 ch;
+        /* We copy the raw representation one byte at a time because the
+           pointer may be unaligned (see test_codeccallbacks). */
+        ((char *) &ch)[0] = s[0];
+        ((char *) &ch)[1] = s[1];
+#ifdef Py_UNICODE_WIDE
+        ((char *) &ch)[2] = s[2];
+        ((char *) &ch)[3] = s[3];
+#endif
         /* We have to sanity check the raw data, otherwise doom looms for
            some malformed UCS-4 data. */
         if (