[Python-checkins] cpython: Fix regression on 2-byte wchar_t systems (Windows)

antoine.pitrou python-checkins at python.org
Fri Nov 11 13:36:37 CET 2011


http://hg.python.org/cpython/rev/6f3f306fb8f3
changeset:   73495:6f3f306fb8f3
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Fri Nov 11 13:29:12 2011 +0100
summary:
  Fix regression on 2-byte wchar_t systems (Windows)

files:
  Objects/unicodeobject.c |  21 +++++++++++++--------
  1 files changed, 13 insertions(+), 8 deletions(-)


diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6252,15 +6252,18 @@
     end = s + size;
 
     while (s < end) {
+        Py_UNICODE uch;
         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];
+        ((char *) &uch)[0] = s[0];
+        ((char *) &uch)[1] = s[1];
 #ifdef Py_UNICODE_WIDE
-        ((char *) &ch)[2] = s[2];
-        ((char *) &ch)[3] = s[3];
-#endif
+        ((char *) &uch)[2] = s[2];
+        ((char *) &uch)[3] = s[3];
+#endif
+        ch = uch;
+
         /* We have to sanity check the raw data, otherwise doom looms for
            some malformed UCS-4 data. */
         if (
@@ -6292,10 +6295,12 @@
 #ifndef Py_UNICODE_WIDE
         if (ch >= 0xD800 && ch <= 0xDBFF && s < end)
         {
-            Py_UCS4 ch2 = *(Py_UNICODE*)s;
-            if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
+            Py_UNICODE uch2;
+            ((char *) &uch2)[0] = s[0];
+            ((char *) &uch2)[1] = s[1];
+            if (uch2 >= 0xDC00 && uch2 <= 0xDFFF)
             {
-                ch = (((ch & 0x3FF)<<10) | (ch2 & 0x3FF)) + 0x10000;
+                ch = (((uch & 0x3FF)<<10) | (uch2 & 0x3FF)) + 0x10000;
                 s += Py_UNICODE_SIZE;
             }
         }

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list